18289b279Sblueswir1 /* 28289b279Sblueswir1 * Tiny Code Generator for QEMU 38289b279Sblueswir1 * 48289b279Sblueswir1 * Copyright (c) 2008 Fabrice Bellard 58289b279Sblueswir1 * 68289b279Sblueswir1 * Permission is hereby granted, free of charge, to any person obtaining a copy 78289b279Sblueswir1 * of this software and associated documentation files (the "Software"), to deal 88289b279Sblueswir1 * in the Software without restriction, including without limitation the rights 98289b279Sblueswir1 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 108289b279Sblueswir1 * copies of the Software, and to permit persons to whom the Software is 118289b279Sblueswir1 * furnished to do so, subject to the following conditions: 128289b279Sblueswir1 * 138289b279Sblueswir1 * The above copyright notice and this permission notice shall be included in 148289b279Sblueswir1 * all copies or substantial portions of the Software. 158289b279Sblueswir1 * 168289b279Sblueswir1 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 178289b279Sblueswir1 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 188289b279Sblueswir1 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 198289b279Sblueswir1 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 208289b279Sblueswir1 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 218289b279Sblueswir1 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 228289b279Sblueswir1 * THE SOFTWARE. 238289b279Sblueswir1 */ 2414e54f8eSMarkus Armbruster 2514e54f8eSMarkus Armbruster #ifndef SPARC_TCG_TARGET_H 2614e54f8eSMarkus Armbruster #define SPARC_TCG_TARGET_H 278289b279Sblueswir1 2878cd7b83SRichard Henderson #define TCG_TARGET_REG_BITS 64 2978cd7b83SRichard Henderson 30abce5964SRichard Henderson #define TCG_TARGET_INSN_UNIT_SIZE 4 31006f8638SPaolo Bonzini #define TCG_TARGET_TLB_DISPLACEMENT_BITS 32 328289b279Sblueswir1 #define TCG_TARGET_NB_REGS 32 33*26a75d12SRichard Henderson #define MAX_CODE_GEN_BUFFER_SIZE (2 * GiB) 348289b279Sblueswir1 35771142c2SRichard Henderson typedef enum { 368289b279Sblueswir1 TCG_REG_G0 = 0, 378289b279Sblueswir1 TCG_REG_G1, 388289b279Sblueswir1 TCG_REG_G2, 398289b279Sblueswir1 TCG_REG_G3, 408289b279Sblueswir1 TCG_REG_G4, 418289b279Sblueswir1 TCG_REG_G5, 428289b279Sblueswir1 TCG_REG_G6, 438289b279Sblueswir1 TCG_REG_G7, 448289b279Sblueswir1 TCG_REG_O0, 458289b279Sblueswir1 TCG_REG_O1, 468289b279Sblueswir1 TCG_REG_O2, 478289b279Sblueswir1 TCG_REG_O3, 488289b279Sblueswir1 TCG_REG_O4, 498289b279Sblueswir1 TCG_REG_O5, 508289b279Sblueswir1 TCG_REG_O6, 518289b279Sblueswir1 TCG_REG_O7, 528289b279Sblueswir1 TCG_REG_L0, 538289b279Sblueswir1 TCG_REG_L1, 548289b279Sblueswir1 TCG_REG_L2, 558289b279Sblueswir1 TCG_REG_L3, 568289b279Sblueswir1 TCG_REG_L4, 578289b279Sblueswir1 TCG_REG_L5, 588289b279Sblueswir1 TCG_REG_L6, 598289b279Sblueswir1 TCG_REG_L7, 608289b279Sblueswir1 TCG_REG_I0, 618289b279Sblueswir1 TCG_REG_I1, 628289b279Sblueswir1 TCG_REG_I2, 638289b279Sblueswir1 TCG_REG_I3, 648289b279Sblueswir1 TCG_REG_I4, 658289b279Sblueswir1 TCG_REG_I5, 668289b279Sblueswir1 TCG_REG_I6, 678289b279Sblueswir1 TCG_REG_I7, 68771142c2SRichard Henderson } TCGReg; 698289b279Sblueswir1 708289b279Sblueswir1 /* used for function call generation */ 714c3204cbSRichard Henderson #define TCG_REG_CALL_STACK TCG_REG_O6 729b9c37c3SRichard Henderson 7334b1a49cSRichard Henderson #ifdef __arch64__ 744c3204cbSRichard Henderson #define TCG_TARGET_STACK_BIAS 2047 7577fcd093Sblueswir1 #define TCG_TARGET_STACK_ALIGN 16 764c3204cbSRichard Henderson #define TCG_TARGET_CALL_STACK_OFFSET (128 + 6*8 + TCG_TARGET_STACK_BIAS) 77b3db8758Sblueswir1 #else 784c3204cbSRichard Henderson #define TCG_TARGET_STACK_BIAS 0 7977fcd093Sblueswir1 #define TCG_TARGET_STACK_ALIGN 8 804c3204cbSRichard Henderson #define TCG_TARGET_CALL_STACK_OFFSET (64 + 4 + 6*4) 81b3db8758Sblueswir1 #endif 82b3db8758Sblueswir1 8334b1a49cSRichard Henderson #ifdef __arch64__ 842bece2c8SRichard Henderson #define TCG_TARGET_EXTEND_ARGS 1 852bece2c8SRichard Henderson #endif 862bece2c8SRichard Henderson 8790379ca8SRichard Henderson #if defined(__VIS__) && __VIS__ >= 0x300 8890379ca8SRichard Henderson #define use_vis3_instructions 1 8990379ca8SRichard Henderson #else 9090379ca8SRichard Henderson extern bool use_vis3_instructions; 9190379ca8SRichard Henderson #endif 9290379ca8SRichard Henderson 938289b279Sblueswir1 /* optional instructions */ 9425c4d9ccSRichard Henderson #define TCG_TARGET_HAS_div_i32 1 955f9eb025SRichard Henderson #define TCG_TARGET_HAS_rem_i32 0 9625c4d9ccSRichard Henderson #define TCG_TARGET_HAS_rot_i32 0 9725c4d9ccSRichard Henderson #define TCG_TARGET_HAS_ext8s_i32 0 9825c4d9ccSRichard Henderson #define TCG_TARGET_HAS_ext16s_i32 0 9925c4d9ccSRichard Henderson #define TCG_TARGET_HAS_ext8u_i32 0 10025c4d9ccSRichard Henderson #define TCG_TARGET_HAS_ext16u_i32 0 10125c4d9ccSRichard Henderson #define TCG_TARGET_HAS_bswap16_i32 0 10225c4d9ccSRichard Henderson #define TCG_TARGET_HAS_bswap32_i32 0 10325c4d9ccSRichard Henderson #define TCG_TARGET_HAS_neg_i32 1 10425c4d9ccSRichard Henderson #define TCG_TARGET_HAS_not_i32 1 10525c4d9ccSRichard Henderson #define TCG_TARGET_HAS_andc_i32 1 10625c4d9ccSRichard Henderson #define TCG_TARGET_HAS_orc_i32 1 10725c4d9ccSRichard Henderson #define TCG_TARGET_HAS_eqv_i32 0 10825c4d9ccSRichard Henderson #define TCG_TARGET_HAS_nand_i32 0 10925c4d9ccSRichard Henderson #define TCG_TARGET_HAS_nor_i32 0 1100e28d006SRichard Henderson #define TCG_TARGET_HAS_clz_i32 0 1110e28d006SRichard Henderson #define TCG_TARGET_HAS_ctz_i32 0 112a768e4e9SRichard Henderson #define TCG_TARGET_HAS_ctpop_i32 0 11325c4d9ccSRichard Henderson #define TCG_TARGET_HAS_deposit_i32 0 1147ec8bab3SRichard Henderson #define TCG_TARGET_HAS_extract_i32 0 1157ec8bab3SRichard Henderson #define TCG_TARGET_HAS_sextract_i32 0 116fce1296fSRichard Henderson #define TCG_TARGET_HAS_extract2_i32 0 117ded37f0dSRichard Henderson #define TCG_TARGET_HAS_movcond_i32 1 118803d805bSRichard Henderson #define TCG_TARGET_HAS_add2_i32 1 119803d805bSRichard Henderson #define TCG_TARGET_HAS_sub2_i32 1 120803d805bSRichard Henderson #define TCG_TARGET_HAS_mulu2_i32 1 121f4c16661SRichard Henderson #define TCG_TARGET_HAS_muls2_i32 1 12203271524SRichard Henderson #define TCG_TARGET_HAS_muluh_i32 0 12303271524SRichard Henderson #define TCG_TARGET_HAS_mulsh_i32 0 12438f81dc5SRichard Henderson #define TCG_TARGET_HAS_goto_ptr 1 125a8583393SRichard Henderson #define TCG_TARGET_HAS_direct_jump 1 12607ce0b05SRichard Henderson #define TCG_TARGET_HAS_qemu_st8_i32 0 1274b5a85c1SRichard Henderson 128609ad705SRichard Henderson #define TCG_TARGET_HAS_extrl_i64_i32 1 129609ad705SRichard Henderson #define TCG_TARGET_HAS_extrh_i64_i32 1 13025c4d9ccSRichard Henderson #define TCG_TARGET_HAS_div_i64 1 1315f9eb025SRichard Henderson #define TCG_TARGET_HAS_rem_i64 0 13225c4d9ccSRichard Henderson #define TCG_TARGET_HAS_rot_i64 0 13325c4d9ccSRichard Henderson #define TCG_TARGET_HAS_ext8s_i64 0 13425c4d9ccSRichard Henderson #define TCG_TARGET_HAS_ext16s_i64 0 13525c4d9ccSRichard Henderson #define TCG_TARGET_HAS_ext32s_i64 1 13625c4d9ccSRichard Henderson #define TCG_TARGET_HAS_ext8u_i64 0 13725c4d9ccSRichard Henderson #define TCG_TARGET_HAS_ext16u_i64 0 13825c4d9ccSRichard Henderson #define TCG_TARGET_HAS_ext32u_i64 1 13925c4d9ccSRichard Henderson #define TCG_TARGET_HAS_bswap16_i64 0 14025c4d9ccSRichard Henderson #define TCG_TARGET_HAS_bswap32_i64 0 14125c4d9ccSRichard Henderson #define TCG_TARGET_HAS_bswap64_i64 0 14225c4d9ccSRichard Henderson #define TCG_TARGET_HAS_neg_i64 1 14325c4d9ccSRichard Henderson #define TCG_TARGET_HAS_not_i64 1 14425c4d9ccSRichard Henderson #define TCG_TARGET_HAS_andc_i64 1 14525c4d9ccSRichard Henderson #define TCG_TARGET_HAS_orc_i64 1 14625c4d9ccSRichard Henderson #define TCG_TARGET_HAS_eqv_i64 0 14725c4d9ccSRichard Henderson #define TCG_TARGET_HAS_nand_i64 0 14825c4d9ccSRichard Henderson #define TCG_TARGET_HAS_nor_i64 0 1490e28d006SRichard Henderson #define TCG_TARGET_HAS_clz_i64 0 1500e28d006SRichard Henderson #define TCG_TARGET_HAS_ctz_i64 0 151a768e4e9SRichard Henderson #define TCG_TARGET_HAS_ctpop_i64 0 15225c4d9ccSRichard Henderson #define TCG_TARGET_HAS_deposit_i64 0 1537ec8bab3SRichard Henderson #define TCG_TARGET_HAS_extract_i64 0 1547ec8bab3SRichard Henderson #define TCG_TARGET_HAS_sextract_i64 0 155fce1296fSRichard Henderson #define TCG_TARGET_HAS_extract2_i64 0 156ded37f0dSRichard Henderson #define TCG_TARGET_HAS_movcond_i64 1 157609ac1e1SRichard Henderson #define TCG_TARGET_HAS_add2_i64 1 158609ac1e1SRichard Henderson #define TCG_TARGET_HAS_sub2_i64 1 159d7156f7cSRichard Henderson #define TCG_TARGET_HAS_mulu2_i64 0 1604d3203fdSRichard Henderson #define TCG_TARGET_HAS_muls2_i64 0 161de8301e5SRichard Henderson #define TCG_TARGET_HAS_muluh_i64 use_vis3_instructions 16203271524SRichard Henderson #define TCG_TARGET_HAS_mulsh_i64 0 163cc6dfecfSRichard Henderson 1640c554161SRichard Henderson #define TCG_AREG0 TCG_REG_I0 1658289b279Sblueswir1 16671650df7SPranith Kumar #define TCG_TARGET_DEFAULT_MO (0) 167e1dcf352SRichard Henderson #define TCG_TARGET_HAS_MEMORY_BSWAP 1 16871650df7SPranith Kumar 1691acbad0fSRichard Henderson void tb_target_set_jmp_target(uintptr_t, uintptr_t, uintptr_t, uintptr_t); 170a8583393SRichard Henderson 171e9823b4cSRichard Henderson #define TCG_TARGET_NEED_POOL_LABELS 172e9823b4cSRichard Henderson 173cb9c377fSPaolo Bonzini #endif 174