16d0b52edSRichard Henderson /* 26d0b52edSRichard Henderson * Tiny Code Generator for QEMU 36d0b52edSRichard Henderson * 46d0b52edSRichard Henderson * Copyright (c) 2008 Fabrice Bellard 56d0b52edSRichard Henderson * 66d0b52edSRichard Henderson * Permission is hereby granted, free of charge, to any person obtaining a copy 76d0b52edSRichard Henderson * of this software and associated documentation files (the "Software"), to deal 86d0b52edSRichard Henderson * in the Software without restriction, including without limitation the rights 96d0b52edSRichard Henderson * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 106d0b52edSRichard Henderson * copies of the Software, and to permit persons to whom the Software is 116d0b52edSRichard Henderson * furnished to do so, subject to the following conditions: 126d0b52edSRichard Henderson * 136d0b52edSRichard Henderson * The above copyright notice and this permission notice shall be included in 146d0b52edSRichard Henderson * all copies or substantial portions of the Software. 156d0b52edSRichard Henderson * 166d0b52edSRichard Henderson * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 176d0b52edSRichard Henderson * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 186d0b52edSRichard Henderson * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 196d0b52edSRichard Henderson * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 206d0b52edSRichard Henderson * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 216d0b52edSRichard Henderson * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 226d0b52edSRichard Henderson * THE SOFTWARE. 236d0b52edSRichard Henderson */ 246d0b52edSRichard Henderson 256d0b52edSRichard Henderson #ifndef SPARC_TCG_TARGET_H 266d0b52edSRichard Henderson #define SPARC_TCG_TARGET_H 276d0b52edSRichard Henderson 286d0b52edSRichard Henderson #define TCG_TARGET_INSN_UNIT_SIZE 4 296d0b52edSRichard Henderson #define TCG_TARGET_NB_REGS 32 306d0b52edSRichard Henderson #define MAX_CODE_GEN_BUFFER_SIZE (2 * GiB) 316d0b52edSRichard Henderson 326d0b52edSRichard Henderson typedef enum { 336d0b52edSRichard Henderson TCG_REG_G0 = 0, 346d0b52edSRichard Henderson TCG_REG_G1, 356d0b52edSRichard Henderson TCG_REG_G2, 366d0b52edSRichard Henderson TCG_REG_G3, 376d0b52edSRichard Henderson TCG_REG_G4, 386d0b52edSRichard Henderson TCG_REG_G5, 396d0b52edSRichard Henderson TCG_REG_G6, 406d0b52edSRichard Henderson TCG_REG_G7, 416d0b52edSRichard Henderson TCG_REG_O0, 426d0b52edSRichard Henderson TCG_REG_O1, 436d0b52edSRichard Henderson TCG_REG_O2, 446d0b52edSRichard Henderson TCG_REG_O3, 456d0b52edSRichard Henderson TCG_REG_O4, 466d0b52edSRichard Henderson TCG_REG_O5, 476d0b52edSRichard Henderson TCG_REG_O6, 486d0b52edSRichard Henderson TCG_REG_O7, 496d0b52edSRichard Henderson TCG_REG_L0, 506d0b52edSRichard Henderson TCG_REG_L1, 516d0b52edSRichard Henderson TCG_REG_L2, 526d0b52edSRichard Henderson TCG_REG_L3, 536d0b52edSRichard Henderson TCG_REG_L4, 546d0b52edSRichard Henderson TCG_REG_L5, 556d0b52edSRichard Henderson TCG_REG_L6, 566d0b52edSRichard Henderson TCG_REG_L7, 576d0b52edSRichard Henderson TCG_REG_I0, 586d0b52edSRichard Henderson TCG_REG_I1, 596d0b52edSRichard Henderson TCG_REG_I2, 606d0b52edSRichard Henderson TCG_REG_I3, 616d0b52edSRichard Henderson TCG_REG_I4, 626d0b52edSRichard Henderson TCG_REG_I5, 636d0b52edSRichard Henderson TCG_REG_I6, 646d0b52edSRichard Henderson TCG_REG_I7, 656d0b52edSRichard Henderson } TCGReg; 666d0b52edSRichard Henderson 676d0b52edSRichard Henderson /* used for function call generation */ 686d0b52edSRichard Henderson #define TCG_REG_CALL_STACK TCG_REG_O6 696d0b52edSRichard Henderson 706d0b52edSRichard Henderson #define TCG_TARGET_STACK_BIAS 2047 716d0b52edSRichard Henderson #define TCG_TARGET_STACK_ALIGN 16 726d0b52edSRichard Henderson #define TCG_TARGET_CALL_STACK_OFFSET (128 + 6*8 + TCG_TARGET_STACK_BIAS) 73eb8b0224SRichard Henderson #define TCG_TARGET_CALL_ARG_I32 TCG_CALL_ARG_EXTEND 74c8eef960SRichard Henderson #define TCG_TARGET_CALL_ARG_I64 TCG_CALL_ARG_NORMAL 755427a9a7SRichard Henderson #define TCG_TARGET_CALL_ARG_I128 TCG_CALL_ARG_NORMAL 765427a9a7SRichard Henderson #define TCG_TARGET_CALL_RET_I128 TCG_CALL_RET_NORMAL 776d0b52edSRichard Henderson 786d0b52edSRichard Henderson #if defined(__VIS__) && __VIS__ >= 0x300 796d0b52edSRichard Henderson #define use_vis3_instructions 1 806d0b52edSRichard Henderson #else 816d0b52edSRichard Henderson extern bool use_vis3_instructions; 826d0b52edSRichard Henderson #endif 836d0b52edSRichard Henderson 846d0b52edSRichard Henderson /* optional instructions */ 856d0b52edSRichard Henderson #define TCG_TARGET_HAS_div_i32 1 866d0b52edSRichard Henderson #define TCG_TARGET_HAS_rem_i32 0 876d0b52edSRichard Henderson #define TCG_TARGET_HAS_rot_i32 0 886d0b52edSRichard Henderson #define TCG_TARGET_HAS_ext8s_i32 0 896d0b52edSRichard Henderson #define TCG_TARGET_HAS_ext16s_i32 0 906d0b52edSRichard Henderson #define TCG_TARGET_HAS_ext8u_i32 0 916d0b52edSRichard Henderson #define TCG_TARGET_HAS_ext16u_i32 0 926d0b52edSRichard Henderson #define TCG_TARGET_HAS_bswap16_i32 0 936d0b52edSRichard Henderson #define TCG_TARGET_HAS_bswap32_i32 0 946d0b52edSRichard Henderson #define TCG_TARGET_HAS_not_i32 1 956d0b52edSRichard Henderson #define TCG_TARGET_HAS_andc_i32 1 966d0b52edSRichard Henderson #define TCG_TARGET_HAS_orc_i32 1 976d0b52edSRichard Henderson #define TCG_TARGET_HAS_eqv_i32 0 986d0b52edSRichard Henderson #define TCG_TARGET_HAS_nand_i32 0 996d0b52edSRichard Henderson #define TCG_TARGET_HAS_nor_i32 0 1006d0b52edSRichard Henderson #define TCG_TARGET_HAS_clz_i32 0 1016d0b52edSRichard Henderson #define TCG_TARGET_HAS_ctz_i32 0 1026d0b52edSRichard Henderson #define TCG_TARGET_HAS_ctpop_i32 0 1036d0b52edSRichard Henderson #define TCG_TARGET_HAS_deposit_i32 0 1046d0b52edSRichard Henderson #define TCG_TARGET_HAS_extract_i32 0 1056d0b52edSRichard Henderson #define TCG_TARGET_HAS_sextract_i32 0 1066d0b52edSRichard Henderson #define TCG_TARGET_HAS_extract2_i32 0 107a0fdd7c9SRichard Henderson #define TCG_TARGET_HAS_negsetcond_i32 1 1086d0b52edSRichard Henderson #define TCG_TARGET_HAS_add2_i32 1 1096d0b52edSRichard Henderson #define TCG_TARGET_HAS_sub2_i32 1 1106d0b52edSRichard Henderson #define TCG_TARGET_HAS_mulu2_i32 1 1116d0b52edSRichard Henderson #define TCG_TARGET_HAS_muls2_i32 1 1126d0b52edSRichard Henderson #define TCG_TARGET_HAS_muluh_i32 0 1136d0b52edSRichard Henderson #define TCG_TARGET_HAS_mulsh_i32 0 1146d0b52edSRichard Henderson #define TCG_TARGET_HAS_qemu_st8_i32 0 1156d0b52edSRichard Henderson 116dad2f2f5SRichard Henderson #define TCG_TARGET_HAS_extr_i64_i32 0 1176d0b52edSRichard Henderson #define TCG_TARGET_HAS_div_i64 1 1186d0b52edSRichard Henderson #define TCG_TARGET_HAS_rem_i64 0 1196d0b52edSRichard Henderson #define TCG_TARGET_HAS_rot_i64 0 1206d0b52edSRichard Henderson #define TCG_TARGET_HAS_ext8s_i64 0 1216d0b52edSRichard Henderson #define TCG_TARGET_HAS_ext16s_i64 0 1226d0b52edSRichard Henderson #define TCG_TARGET_HAS_ext32s_i64 1 1236d0b52edSRichard Henderson #define TCG_TARGET_HAS_ext8u_i64 0 1246d0b52edSRichard Henderson #define TCG_TARGET_HAS_ext16u_i64 0 1256d0b52edSRichard Henderson #define TCG_TARGET_HAS_ext32u_i64 1 1266d0b52edSRichard Henderson #define TCG_TARGET_HAS_bswap16_i64 0 1276d0b52edSRichard Henderson #define TCG_TARGET_HAS_bswap32_i64 0 1286d0b52edSRichard Henderson #define TCG_TARGET_HAS_bswap64_i64 0 1296d0b52edSRichard Henderson #define TCG_TARGET_HAS_not_i64 1 1306d0b52edSRichard Henderson #define TCG_TARGET_HAS_andc_i64 1 1316d0b52edSRichard Henderson #define TCG_TARGET_HAS_orc_i64 1 1326d0b52edSRichard Henderson #define TCG_TARGET_HAS_eqv_i64 0 1336d0b52edSRichard Henderson #define TCG_TARGET_HAS_nand_i64 0 1346d0b52edSRichard Henderson #define TCG_TARGET_HAS_nor_i64 0 1356d0b52edSRichard Henderson #define TCG_TARGET_HAS_clz_i64 0 1366d0b52edSRichard Henderson #define TCG_TARGET_HAS_ctz_i64 0 1376d0b52edSRichard Henderson #define TCG_TARGET_HAS_ctpop_i64 0 1386d0b52edSRichard Henderson #define TCG_TARGET_HAS_deposit_i64 0 1396d0b52edSRichard Henderson #define TCG_TARGET_HAS_extract_i64 0 1406d0b52edSRichard Henderson #define TCG_TARGET_HAS_sextract_i64 0 1416d0b52edSRichard Henderson #define TCG_TARGET_HAS_extract2_i64 0 142a0fdd7c9SRichard Henderson #define TCG_TARGET_HAS_negsetcond_i64 1 1436d0b52edSRichard Henderson #define TCG_TARGET_HAS_add2_i64 1 1446d0b52edSRichard Henderson #define TCG_TARGET_HAS_sub2_i64 1 1456d0b52edSRichard Henderson #define TCG_TARGET_HAS_mulu2_i64 0 1466d0b52edSRichard Henderson #define TCG_TARGET_HAS_muls2_i64 0 1476d0b52edSRichard Henderson #define TCG_TARGET_HAS_muluh_i64 use_vis3_instructions 1486d0b52edSRichard Henderson #define TCG_TARGET_HAS_mulsh_i64 0 1496d0b52edSRichard Henderson 15012fde9bcSRichard Henderson #define TCG_TARGET_HAS_qemu_ldst_i128 0 15112fde9bcSRichard Henderson 152*b9ddaf56SRichard Henderson #define TCG_TARGET_HAS_tst 1 153caf3eaccSRichard Henderson 1546d0b52edSRichard Henderson #define TCG_AREG0 TCG_REG_I0 1556d0b52edSRichard Henderson 1566d0b52edSRichard Henderson #define TCG_TARGET_DEFAULT_MO (0) 15729086503SRichard Henderson #define TCG_TARGET_NEED_LDST_LABELS 1586d0b52edSRichard Henderson #define TCG_TARGET_NEED_POOL_LABELS 1596d0b52edSRichard Henderson 1606d0b52edSRichard Henderson #endif 161