xref: /qemu/tcg/sparc64/tcg-target.h (revision 26a75d12d33ff80ee797ca32373f6333da4f194f)
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