tcg-s390: new TCG Target

Original patch from Ulrich Hecht, further work from Alexander Graf
and Richard Henderson.

Cc: Ulrich Hecht <uli@suse.de>
Cc: Alexander Graf <agraf@suse.de>
Signed-off-by: Richard Henderson <rth@twiddle.net>
Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>
This commit is contained in:
Richard Henderson 2010-06-28 19:15:37 -07:00 committed by Aurelien Jarno
parent b9e946c781
commit 48bb3750e1
3 changed files with 2280 additions and 49 deletions

2
configure vendored
View File

@ -733,10 +733,12 @@ case "$cpu" in
s390) s390)
QEMU_CFLAGS="-m31 -march=z990 $QEMU_CFLAGS" QEMU_CFLAGS="-m31 -march=z990 $QEMU_CFLAGS"
LDFLAGS="-m31 $LDFLAGS" LDFLAGS="-m31 $LDFLAGS"
host_guest_base="yes"
;; ;;
s390x) s390x)
QEMU_CFLAGS="-m64 -march=z990 $QEMU_CFLAGS" QEMU_CFLAGS="-m64 -march=z990 $QEMU_CFLAGS"
LDFLAGS="-m64 $LDFLAGS" LDFLAGS="-m64 $LDFLAGS"
host_guest_base="yes"
;; ;;
i386) i386)
QEMU_CFLAGS="-m32 $QEMU_CFLAGS" QEMU_CFLAGS="-m32 $QEMU_CFLAGS"

File diff suppressed because it is too large Load Diff

View File

@ -23,10 +23,15 @@
*/ */
#define TCG_TARGET_S390 1 #define TCG_TARGET_S390 1
#ifdef __s390x__
#define TCG_TARGET_REG_BITS 64 #define TCG_TARGET_REG_BITS 64
#else
#define TCG_TARGET_REG_BITS 32
#endif
#define TCG_TARGET_WORDS_BIGENDIAN #define TCG_TARGET_WORDS_BIGENDIAN
enum { typedef enum TCGReg {
TCG_REG_R0 = 0, TCG_REG_R0 = 0,
TCG_REG_R1, TCG_REG_R1,
TCG_REG_R2, TCG_REG_R2,
@ -43,44 +48,49 @@ enum {
TCG_REG_R13, TCG_REG_R13,
TCG_REG_R14, TCG_REG_R14,
TCG_REG_R15 TCG_REG_R15
}; } TCGReg;
#define TCG_TARGET_NB_REGS 16 #define TCG_TARGET_NB_REGS 16
/* optional instructions */ /* optional instructions */
// #define TCG_TARGET_HAS_div_i32 #define TCG_TARGET_HAS_div2_i32
// #define TCG_TARGET_HAS_rot_i32 #define TCG_TARGET_HAS_rot_i32
// #define TCG_TARGET_HAS_ext8s_i32 #define TCG_TARGET_HAS_ext8s_i32
// #define TCG_TARGET_HAS_ext16s_i32 #define TCG_TARGET_HAS_ext16s_i32
// #define TCG_TARGET_HAS_ext8u_i32 #define TCG_TARGET_HAS_ext8u_i32
// #define TCG_TARGET_HAS_ext16u_i32 #define TCG_TARGET_HAS_ext16u_i32
// #define TCG_TARGET_HAS_bswap16_i32 #define TCG_TARGET_HAS_bswap16_i32
// #define TCG_TARGET_HAS_bswap32_i32 #define TCG_TARGET_HAS_bswap32_i32
// #define TCG_TARGET_HAS_not_i32 // #define TCG_TARGET_HAS_not_i32
// #define TCG_TARGET_HAS_neg_i32 #define TCG_TARGET_HAS_neg_i32
// #define TCG_TARGET_HAS_andc_i32 // #define TCG_TARGET_HAS_andc_i32
// #define TCG_TARGET_HAS_orc_i32 // #define TCG_TARGET_HAS_orc_i32
// #define TCG_TARGET_HAS_eqv_i32 // #define TCG_TARGET_HAS_eqv_i32
// #define TCG_TARGET_HAS_nand_i32 // #define TCG_TARGET_HAS_nand_i32
// #define TCG_TARGET_HAS_nor_i32 // #define TCG_TARGET_HAS_nor_i32
// #define TCG_TARGET_HAS_div_i64 #if TCG_TARGET_REG_BITS == 64
// #define TCG_TARGET_HAS_rot_i64 #define TCG_TARGET_HAS_div2_i64
// #define TCG_TARGET_HAS_ext8s_i64 #define TCG_TARGET_HAS_rot_i64
// #define TCG_TARGET_HAS_ext16s_i64 #define TCG_TARGET_HAS_ext8s_i64
// #define TCG_TARGET_HAS_ext32s_i64 #define TCG_TARGET_HAS_ext16s_i64
// #define TCG_TARGET_HAS_ext8u_i64 #define TCG_TARGET_HAS_ext32s_i64
// #define TCG_TARGET_HAS_ext16u_i64 #define TCG_TARGET_HAS_ext8u_i64
// #define TCG_TARGET_HAS_ext32u_i64 #define TCG_TARGET_HAS_ext16u_i64
// #define TCG_TARGET_HAS_bswap16_i64 #define TCG_TARGET_HAS_ext32u_i64
// #define TCG_TARGET_HAS_bswap32_i64 #define TCG_TARGET_HAS_bswap16_i64
// #define TCG_TARGET_HAS_bswap64_i64 #define TCG_TARGET_HAS_bswap32_i64
#define TCG_TARGET_HAS_bswap64_i64
// #define TCG_TARGET_HAS_not_i64 // #define TCG_TARGET_HAS_not_i64
// #define TCG_TARGET_HAS_neg_i64 #define TCG_TARGET_HAS_neg_i64
// #define TCG_TARGET_HAS_andc_i64 // #define TCG_TARGET_HAS_andc_i64
// #define TCG_TARGET_HAS_orc_i64 // #define TCG_TARGET_HAS_orc_i64
// #define TCG_TARGET_HAS_eqv_i64 // #define TCG_TARGET_HAS_eqv_i64
// #define TCG_TARGET_HAS_nand_i64 // #define TCG_TARGET_HAS_nand_i64
// #define TCG_TARGET_HAS_nor_i64 // #define TCG_TARGET_HAS_nor_i64
#endif
#define TCG_TARGET_HAS_GUEST_BASE
/* used for function call generation */ /* used for function call generation */
#define TCG_REG_CALL_STACK TCG_REG_R15 #define TCG_REG_CALL_STACK TCG_REG_R15