|
@@ -47,135 +47,7 @@
|
|
|
// weird psuedo-native bytecode. We'll indicate that we're intepreted.
|
|
|
#define TCG_TARGET_INTERPRETER 1
|
|
|
|
|
|
-//
|
|
|
-// Supported optional scalar instructions.
|
|
|
-//
|
|
|
-
|
|
|
-// Divs.
|
|
|
-#define TCG_TARGET_HAS_div_i32 1
|
|
|
-#define TCG_TARGET_HAS_rem_i32 1
|
|
|
-#define TCG_TARGET_HAS_div_i64 1
|
|
|
-#define TCG_TARGET_HAS_rem_i64 1
|
|
|
-
|
|
|
-// Extends.
|
|
|
-#define TCG_TARGET_HAS_ext8s_i32 1
|
|
|
-#define TCG_TARGET_HAS_ext16s_i32 1
|
|
|
-#define TCG_TARGET_HAS_ext8u_i32 1
|
|
|
-#define TCG_TARGET_HAS_ext16u_i32 1
|
|
|
-#define TCG_TARGET_HAS_ext8s_i64 1
|
|
|
-#define TCG_TARGET_HAS_ext16s_i64 1
|
|
|
-#define TCG_TARGET_HAS_ext32s_i64 1
|
|
|
-#define TCG_TARGET_HAS_ext8u_i64 1
|
|
|
-#define TCG_TARGET_HAS_ext16u_i64 1
|
|
|
-#define TCG_TARGET_HAS_ext32u_i64 1
|
|
|
-#define TCG_TARGET_HAS_extr_i64_i32 0
|
|
|
-
|
|
|
-// Register extractions.
|
|
|
-#define TCG_TARGET_HAS_extrl_i64_i32 1
|
|
|
-#define TCG_TARGET_HAS_extrh_i64_i32 1
|
|
|
-
|
|
|
-// Negations.
|
|
|
-#define TCG_TARGET_HAS_not_i32 1
|
|
|
-#define TCG_TARGET_HAS_not_i64 1
|
|
|
-
|
|
|
-// Logicals.
|
|
|
-#define TCG_TARGET_HAS_andc_i32 1
|
|
|
-#define TCG_TARGET_HAS_orc_i32 1
|
|
|
-#define TCG_TARGET_HAS_eqv_i32 1
|
|
|
-#define TCG_TARGET_HAS_rot_i32 1
|
|
|
-#define TCG_TARGET_HAS_negsetcond_i32 0
|
|
|
-#define TCG_TARGET_HAS_negsetcond_i64 0
|
|
|
-#define TCG_TARGET_HAS_nand_i32 1
|
|
|
-#define TCG_TARGET_HAS_nor_i32 1
|
|
|
-#define TCG_TARGET_HAS_andc_i64 1
|
|
|
-#define TCG_TARGET_HAS_eqv_i64 1
|
|
|
-#define TCG_TARGET_HAS_orc_i64 1
|
|
|
-#define TCG_TARGET_HAS_rot_i64 1
|
|
|
-#define TCG_TARGET_HAS_nor_i64 1
|
|
|
-#define TCG_TARGET_HAS_nand_i64 1
|
|
|
-
|
|
|
-// Bitwise operations.
|
|
|
-#define TCG_TARGET_HAS_clz_i32 1
|
|
|
-#define TCG_TARGET_HAS_ctz_i32 1
|
|
|
-#define TCG_TARGET_HAS_clz_i64 1
|
|
|
-#define TCG_TARGET_HAS_ctz_i64 1
|
|
|
-#define TCG_TARGET_HAS_tst 0
|
|
|
-
|
|
|
-// Swaps.
|
|
|
-#define TCG_TARGET_HAS_bswap16_i32 1
|
|
|
-#define TCG_TARGET_HAS_bswap32_i32 1
|
|
|
-#define TCG_TARGET_HAS_bswap16_i64 1
|
|
|
-#define TCG_TARGET_HAS_bswap32_i64 1
|
|
|
-#define TCG_TARGET_HAS_bswap64_i64 1
|
|
|
-
|
|
|
-//
|
|
|
-// Supported optional vector instructions.
|
|
|
-//
|
|
|
-
|
|
|
-#define TCG_TARGET_HAS_v64 1
|
|
|
-#define TCG_TARGET_HAS_v128 1
|
|
|
-#define TCG_TARGET_HAS_v256 0
|
|
|
-
|
|
|
-#define TCG_TARGET_HAS_andc_vec 1
|
|
|
-#define TCG_TARGET_HAS_orc_vec 1
|
|
|
-#define TCG_TARGET_HAS_nand_vec 0
|
|
|
-#define TCG_TARGET_HAS_nor_vec 0
|
|
|
-#define TCG_TARGET_HAS_eqv_vec 0
|
|
|
-#define TCG_TARGET_HAS_not_vec 1
|
|
|
-#define TCG_TARGET_HAS_neg_vec 1
|
|
|
-#define TCG_TARGET_HAS_abs_vec 1
|
|
|
-#define TCG_TARGET_HAS_roti_vec 0
|
|
|
-#define TCG_TARGET_HAS_rots_vec 0
|
|
|
-#define TCG_TARGET_HAS_rotv_vec 0
|
|
|
-#define TCG_TARGET_HAS_shi_vec 0
|
|
|
-#define TCG_TARGET_HAS_shs_vec 0
|
|
|
-#define TCG_TARGET_HAS_shv_vec 1
|
|
|
-#define TCG_TARGET_HAS_mul_vec 1
|
|
|
-#define TCG_TARGET_HAS_sat_vec 1
|
|
|
-#define TCG_TARGET_HAS_minmax_vec 1
|
|
|
-#define TCG_TARGET_HAS_bitsel_vec 1
|
|
|
-#define TCG_TARGET_HAS_cmpsel_vec 0
|
|
|
-#define TCG_TARGET_HAS_tst_vec 0
|
|
|
-
|
|
|
-//
|
|
|
-// Unsupported instructions.
|
|
|
-//
|
|
|
-
|
|
|
-// There's no direct instruction with which to count the number of ones,
|
|
|
-// so we'll leave this implemented as other instructions.
|
|
|
-#define TCG_TARGET_HAS_ctpop_i32 0
|
|
|
-#define TCG_TARGET_HAS_ctpop_i64 0
|
|
|
-
|
|
|
-// We don't currently support gadgets with more than three arguments,
|
|
|
-// so we can't yet create movcond, deposit, or extract gadgets.
|
|
|
-#define TCG_TARGET_HAS_deposit_i32 0
|
|
|
-#define TCG_TARGET_HAS_deposit_i64 0
|
|
|
-#define TCG_TARGET_HAS_extract_i32 0
|
|
|
-#define TCG_TARGET_HAS_sextract_i32 0
|
|
|
-#define TCG_TARGET_HAS_extract_i64 0
|
|
|
-#define TCG_TARGET_HAS_sextract_i64 0
|
|
|
-
|
|
|
-// This operation exists specifically to allow us to provide differing register
|
|
|
-// constraints for 8-bit loads and stores. We don't need to do so, so we'll leave
|
|
|
-// this unimplemented, as we gain nothing by it.
|
|
|
-#define TCG_TARGET_HAS_qemu_st8_i32 0
|
|
|
-#define TCG_TARGET_HAS_qemu_ldst_i128 0
|
|
|
-
|
|
|
-// These should always be zero on our 64B platform.
|
|
|
-#define TCG_TARGET_HAS_muls2_i64 0
|
|
|
-#define TCG_TARGET_HAS_add2_i32 0
|
|
|
-#define TCG_TARGET_HAS_sub2_i32 0
|
|
|
-#define TCG_TARGET_HAS_mulu2_i32 0
|
|
|
-#define TCG_TARGET_HAS_add2_i64 0
|
|
|
-#define TCG_TARGET_HAS_sub2_i64 0
|
|
|
-#define TCG_TARGET_HAS_mulu2_i64 0
|
|
|
-#define TCG_TARGET_HAS_muluh_i64 0
|
|
|
-#define TCG_TARGET_HAS_mulsh_i64 0
|
|
|
-#define TCG_TARGET_HAS_extract2_i32 0
|
|
|
-#define TCG_TARGET_HAS_muls2_i32 0
|
|
|
-#define TCG_TARGET_HAS_muluh_i32 0
|
|
|
-#define TCG_TARGET_HAS_mulsh_i32 0
|
|
|
-#define TCG_TARGET_HAS_extract2_i64 0
|
|
|
+#include "tcg-target-has.h"
|
|
|
|
|
|
//
|
|
|
// Platform metadata.
|
|
@@ -226,20 +98,9 @@ typedef enum {
|
|
|
|
|
|
} TCGReg;
|
|
|
|
|
|
-// Specify the shape of the stack our runtime will use.
|
|
|
-#define TCG_TARGET_CALL_STACK_OFFSET 0
|
|
|
-#define TCG_TARGET_STACK_ALIGN 16
|
|
|
-#define TCG_TARGET_CALL_ARG_I32 TCG_CALL_ARG_NORMAL
|
|
|
-#define TCG_TARGET_CALL_ARG_I64 TCG_CALL_ARG_NORMAL
|
|
|
-#define TCG_TARGET_CALL_ARG_I128 TCG_CALL_ARG_NORMAL
|
|
|
-#define TCG_TARGET_CALL_RET_I128 TCG_CALL_RET_NORMAL
|
|
|
-
|
|
|
// We're interpreted, so we'll use our own code to run TB_EXEC.
|
|
|
#define HAVE_TCG_QEMU_TB_EXEC
|
|
|
|
|
|
-// We'll need to enforce memory ordering with barriers.
|
|
|
-#define TCG_TARGET_DEFAULT_MO (0)
|
|
|
-
|
|
|
void tci_disas(uint8_t opc);
|
|
|
|
|
|
|