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 338289b279Sblueswir1 34771142c2SRichard Henderson typedef enum { 358289b279Sblueswir1 TCG_REG_G0 = 0, 368289b279Sblueswir1 TCG_REG_G1, 378289b279Sblueswir1 TCG_REG_G2, 388289b279Sblueswir1 TCG_REG_G3, 398289b279Sblueswir1 TCG_REG_G4, 408289b279Sblueswir1 TCG_REG_G5, 418289b279Sblueswir1 TCG_REG_G6, 428289b279Sblueswir1 TCG_REG_G7, 438289b279Sblueswir1 TCG_REG_O0, 448289b279Sblueswir1 TCG_REG_O1, 458289b279Sblueswir1 TCG_REG_O2, 468289b279Sblueswir1 TCG_REG_O3, 478289b279Sblueswir1 TCG_REG_O4, 488289b279Sblueswir1 TCG_REG_O5, 498289b279Sblueswir1 TCG_REG_O6, 508289b279Sblueswir1 TCG_REG_O7, 518289b279Sblueswir1 TCG_REG_L0, 528289b279Sblueswir1 TCG_REG_L1, 538289b279Sblueswir1 TCG_REG_L2, 548289b279Sblueswir1 TCG_REG_L3, 558289b279Sblueswir1 TCG_REG_L4, 568289b279Sblueswir1 TCG_REG_L5, 578289b279Sblueswir1 TCG_REG_L6, 588289b279Sblueswir1 TCG_REG_L7, 598289b279Sblueswir1 TCG_REG_I0, 608289b279Sblueswir1 TCG_REG_I1, 618289b279Sblueswir1 TCG_REG_I2, 628289b279Sblueswir1 TCG_REG_I3, 638289b279Sblueswir1 TCG_REG_I4, 648289b279Sblueswir1 TCG_REG_I5, 658289b279Sblueswir1 TCG_REG_I6, 668289b279Sblueswir1 TCG_REG_I7, 67771142c2SRichard Henderson } TCGReg; 688289b279Sblueswir1 698289b279Sblueswir1 #define TCG_CT_CONST_S11 0x100 708289b279Sblueswir1 #define TCG_CT_CONST_S13 0x200 7189269f6cSRichard Henderson #define TCG_CT_CONST_ZERO 0x400 728289b279Sblueswir1 738289b279Sblueswir1 /* used for function call generation */ 744c3204cbSRichard Henderson #define TCG_REG_CALL_STACK TCG_REG_O6 759b9c37c3SRichard Henderson 7634b1a49cSRichard Henderson #ifdef __arch64__ 774c3204cbSRichard Henderson #define TCG_TARGET_STACK_BIAS 2047 7877fcd093Sblueswir1 #define TCG_TARGET_STACK_ALIGN 16 794c3204cbSRichard Henderson #define TCG_TARGET_CALL_STACK_OFFSET (128 + 6*8 + TCG_TARGET_STACK_BIAS) 80b3db8758Sblueswir1 #else 814c3204cbSRichard Henderson #define TCG_TARGET_STACK_BIAS 0 8277fcd093Sblueswir1 #define TCG_TARGET_STACK_ALIGN 8 834c3204cbSRichard Henderson #define TCG_TARGET_CALL_STACK_OFFSET (64 + 4 + 6*4) 84b3db8758Sblueswir1 #endif 85b3db8758Sblueswir1 8634b1a49cSRichard Henderson #ifdef __arch64__ 872bece2c8SRichard Henderson #define TCG_TARGET_EXTEND_ARGS 1 882bece2c8SRichard Henderson #endif 892bece2c8SRichard Henderson 9090379ca8SRichard Henderson #if defined(__VIS__) && __VIS__ >= 0x300 9190379ca8SRichard Henderson #define use_vis3_instructions 1 9290379ca8SRichard Henderson #else 9390379ca8SRichard Henderson extern bool use_vis3_instructions; 9490379ca8SRichard Henderson #endif 9590379ca8SRichard Henderson 968289b279Sblueswir1 /* optional instructions */ 9725c4d9ccSRichard Henderson #define TCG_TARGET_HAS_div_i32 1 985f9eb025SRichard Henderson #define TCG_TARGET_HAS_rem_i32 0 9925c4d9ccSRichard Henderson #define TCG_TARGET_HAS_rot_i32 0 10025c4d9ccSRichard Henderson #define TCG_TARGET_HAS_ext8s_i32 0 10125c4d9ccSRichard Henderson #define TCG_TARGET_HAS_ext16s_i32 0 10225c4d9ccSRichard Henderson #define TCG_TARGET_HAS_ext8u_i32 0 10325c4d9ccSRichard Henderson #define TCG_TARGET_HAS_ext16u_i32 0 10425c4d9ccSRichard Henderson #define TCG_TARGET_HAS_bswap16_i32 0 10525c4d9ccSRichard Henderson #define TCG_TARGET_HAS_bswap32_i32 0 10625c4d9ccSRichard Henderson #define TCG_TARGET_HAS_neg_i32 1 10725c4d9ccSRichard Henderson #define TCG_TARGET_HAS_not_i32 1 10825c4d9ccSRichard Henderson #define TCG_TARGET_HAS_andc_i32 1 10925c4d9ccSRichard Henderson #define TCG_TARGET_HAS_orc_i32 1 11025c4d9ccSRichard Henderson #define TCG_TARGET_HAS_eqv_i32 0 11125c4d9ccSRichard Henderson #define TCG_TARGET_HAS_nand_i32 0 11225c4d9ccSRichard Henderson #define TCG_TARGET_HAS_nor_i32 0 113*0e28d006SRichard Henderson #define TCG_TARGET_HAS_clz_i32 0 114*0e28d006SRichard Henderson #define TCG_TARGET_HAS_ctz_i32 0 11525c4d9ccSRichard Henderson #define TCG_TARGET_HAS_deposit_i32 0 1167ec8bab3SRichard Henderson #define TCG_TARGET_HAS_extract_i32 0 1177ec8bab3SRichard Henderson #define TCG_TARGET_HAS_sextract_i32 0 118ded37f0dSRichard Henderson #define TCG_TARGET_HAS_movcond_i32 1 119803d805bSRichard Henderson #define TCG_TARGET_HAS_add2_i32 1 120803d805bSRichard Henderson #define TCG_TARGET_HAS_sub2_i32 1 121803d805bSRichard Henderson #define TCG_TARGET_HAS_mulu2_i32 1 122f4c16661SRichard Henderson #define TCG_TARGET_HAS_muls2_i32 1 12303271524SRichard Henderson #define TCG_TARGET_HAS_muluh_i32 0 12403271524SRichard Henderson #define TCG_TARGET_HAS_mulsh_i32 0 1254b5a85c1SRichard Henderson 126609ad705SRichard Henderson #define TCG_TARGET_HAS_extrl_i64_i32 1 127609ad705SRichard Henderson #define TCG_TARGET_HAS_extrh_i64_i32 1 12825c4d9ccSRichard Henderson #define TCG_TARGET_HAS_div_i64 1 1295f9eb025SRichard Henderson #define TCG_TARGET_HAS_rem_i64 0 13025c4d9ccSRichard Henderson #define TCG_TARGET_HAS_rot_i64 0 13125c4d9ccSRichard Henderson #define TCG_TARGET_HAS_ext8s_i64 0 13225c4d9ccSRichard Henderson #define TCG_TARGET_HAS_ext16s_i64 0 13325c4d9ccSRichard Henderson #define TCG_TARGET_HAS_ext32s_i64 1 13425c4d9ccSRichard Henderson #define TCG_TARGET_HAS_ext8u_i64 0 13525c4d9ccSRichard Henderson #define TCG_TARGET_HAS_ext16u_i64 0 13625c4d9ccSRichard Henderson #define TCG_TARGET_HAS_ext32u_i64 1 13725c4d9ccSRichard Henderson #define TCG_TARGET_HAS_bswap16_i64 0 13825c4d9ccSRichard Henderson #define TCG_TARGET_HAS_bswap32_i64 0 13925c4d9ccSRichard Henderson #define TCG_TARGET_HAS_bswap64_i64 0 14025c4d9ccSRichard Henderson #define TCG_TARGET_HAS_neg_i64 1 14125c4d9ccSRichard Henderson #define TCG_TARGET_HAS_not_i64 1 14225c4d9ccSRichard Henderson #define TCG_TARGET_HAS_andc_i64 1 14325c4d9ccSRichard Henderson #define TCG_TARGET_HAS_orc_i64 1 14425c4d9ccSRichard Henderson #define TCG_TARGET_HAS_eqv_i64 0 14525c4d9ccSRichard Henderson #define TCG_TARGET_HAS_nand_i64 0 14625c4d9ccSRichard Henderson #define TCG_TARGET_HAS_nor_i64 0 147*0e28d006SRichard Henderson #define TCG_TARGET_HAS_clz_i64 0 148*0e28d006SRichard Henderson #define TCG_TARGET_HAS_ctz_i64 0 14925c4d9ccSRichard Henderson #define TCG_TARGET_HAS_deposit_i64 0 1507ec8bab3SRichard Henderson #define TCG_TARGET_HAS_extract_i64 0 1517ec8bab3SRichard Henderson #define TCG_TARGET_HAS_sextract_i64 0 152ded37f0dSRichard Henderson #define TCG_TARGET_HAS_movcond_i64 1 153609ac1e1SRichard Henderson #define TCG_TARGET_HAS_add2_i64 1 154609ac1e1SRichard Henderson #define TCG_TARGET_HAS_sub2_i64 1 155d7156f7cSRichard Henderson #define TCG_TARGET_HAS_mulu2_i64 0 1564d3203fdSRichard Henderson #define TCG_TARGET_HAS_muls2_i64 0 157de8301e5SRichard Henderson #define TCG_TARGET_HAS_muluh_i64 use_vis3_instructions 15803271524SRichard Henderson #define TCG_TARGET_HAS_mulsh_i64 0 159cc6dfecfSRichard Henderson 1600c554161SRichard Henderson #define TCG_AREG0 TCG_REG_I0 1618289b279Sblueswir1 162b93949efSRichard Henderson static inline void flush_icache_range(uintptr_t start, uintptr_t stop) 1638289b279Sblueswir1 { 164b93949efSRichard Henderson uintptr_t p; 165387e4176SRichard Henderson for (p = start & -8; p < ((stop + 7) & -8); p += 8) { 1668289b279Sblueswir1 __asm__ __volatile__("flush\t%0" : : "r" (p)); 1678289b279Sblueswir1 } 168b93949efSRichard Henderson } 169cb9c377fSPaolo Bonzini 170cb9c377fSPaolo Bonzini #endif 171