| Index: src/IceInstX8632.def
|
| diff --git a/src/IceInstX8632.def b/src/IceInstX8632.def
|
| index 16c6fb8f7cd88dd5304c83007e7b9f6a53d16b22..e8ba59a5b39a5d43ea0019dbdccb959504e20aab 100644
|
| --- a/src/IceInstX8632.def
|
| +++ b/src/IceInstX8632.def
|
| @@ -16,8 +16,8 @@
|
| #define SUBZERO_SRC_ICEINSTX8632_DEF
|
|
|
| // NOTE: esp is not considered isInt, to avoid register allocating it.
|
| -#define REGX8632_TABLE \
|
| - /* val, init, name, name16, name8, scratch, preserved, stackptr, \
|
| +#define REGX8632_GPR_TABLE \
|
| + /* val, encode, name, name16, name8, scratch, preserved, stackptr, \
|
| frameptr, isI8, isInt, isFP */ \
|
| X(Reg_eax, = 0, "eax", "ax", "al", 1, 0, 0, 0, 1, 1, 0) \
|
| X(Reg_ecx, = Reg_eax + 1, "ecx", "cx", "cl", 1, 0, 0, 0, 1, 1, 0) \
|
| @@ -26,9 +26,10 @@
|
| X(Reg_esp, = Reg_eax + 4, "esp", "sp", "" , 0, 0, 1, 0, 0, 0, 0) \
|
| X(Reg_ebp, = Reg_eax + 5, "ebp", "bp", "" , 0, 1, 0, 1, 0, 1, 0) \
|
| X(Reg_esi, = Reg_eax + 6, "esi", "si", "" , 0, 1, 0, 0, 0, 1, 0) \
|
| - X(Reg_edi, = Reg_eax + 7, "edi", "di", "" , 0, 1, 0, 0, 0, 1, 0) \
|
| - X(Reg_ah, = Reg_edi + 1, "???", "" , "ah", 0, 0, 0, 0, 1, 0, 0) \
|
| - X(Reg_xmm0, = Reg_ah + 1, "xmm0", "" , "" , 1, 0, 0, 0, 0, 0, 1) \
|
| + X(Reg_edi, = Reg_eax + 7, "edi", "di", "" , 0, 1, 0, 0, 0, 1, 0)
|
| +
|
| +#define REGX8632_XMM_TABLE \
|
| + X(Reg_xmm0, = 0, "xmm0", "" , "" , 1, 0, 0, 0, 0, 0, 1) \
|
| X(Reg_xmm1, = Reg_xmm0 + 1, "xmm1", "" , "" , 1, 0, 0, 0, 0, 0, 1) \
|
| X(Reg_xmm2, = Reg_xmm0 + 2, "xmm2", "" , "" , 1, 0, 0, 0, 0, 0, 1) \
|
| X(Reg_xmm3, = Reg_xmm0 + 3, "xmm3", "" , "" , 1, 0, 0, 0, 0, 0, 1) \
|
| @@ -36,9 +37,41 @@
|
| X(Reg_xmm5, = Reg_xmm0 + 5, "xmm5", "" , "" , 1, 0, 0, 0, 0, 0, 1) \
|
| X(Reg_xmm6, = Reg_xmm0 + 6, "xmm6", "" , "" , 1, 0, 0, 0, 0, 0, 1) \
|
| X(Reg_xmm7, = Reg_xmm0 + 7, "xmm7", "" , "" , 1, 0, 0, 0, 0, 0, 1) \
|
| -//#define X(val, init, name, name16, name8, scratch, preserved, stackptr,
|
| +//#define X(val, encode, name, name16, name8, scratch, preserved, stackptr,
|
| +// frameptr, isI8, isInt, isFP)
|
| +
|
| +// We also provide a combined table, so that there is a namespace where
|
| +// all of the registers are considered and have distinct numberings.
|
| +// This is in contrast to the above, where the "encode" is based on how
|
| +// the register numbers will be encoded in binaries and values can overlap.
|
| +#define REGX8632_TABLE \
|
| + /* val, encode, name, name16, name8, scratch, preserved, stackptr, \
|
| + frameptr, isI8, isInt, isFP */ \
|
| + REGX8632_GPR_TABLE \
|
| + X(Reg_ah, = Reg_eax + 4, "???", "" , "ah", 0, 0, 0, 0, 1, 0, 0) \
|
| + REGX8632_XMM_TABLE
|
| +//#define X(val, encode, name, name16, name8, scratch, preserved, stackptr,
|
| // frameptr, isI8, isInt, isFP)
|
|
|
| +#define REGX8632_TABLE_BOUNDS \
|
| + /* val, init */ \
|
| + X(Reg_GPR_First, = Reg_eax) \
|
| + X(Reg_GPR_Last, = Reg_edi) \
|
| + X(Reg_XMM_First, = Reg_xmm0) \
|
| + X(Reg_XMM_Last, = Reg_xmm7) \
|
| +//define X(val, init)
|
| +
|
| +// We also need the encodings for the Byte registers (other info overlaps
|
| +// what is in the REGX8632_GPR_TABLE).
|
| +#define REGX8632_BYTEREG_TABLE \
|
| + /* val, encode */ \
|
| + X(Reg_al, = 0) \
|
| + X(Reg_cl, = 1) \
|
| + X(Reg_dl, = 2) \
|
| + X(Reg_bl, = 3) \
|
| + X(Reg_ah, = 4)
|
| +//#define X(val, encode)
|
| +
|
| // X86 segment registers.
|
| #define SEG_REGX8632_TABLE \
|
| /* enum value, name */ \
|
| @@ -51,20 +84,24 @@
|
| //#define X(val, name)
|
|
|
| #define ICEINSTX8632BR_TABLE \
|
| - /* enum value, opposite, dump, emit */ \
|
| - X(Br_a, Br_be, "a", "ja") \
|
| - X(Br_ae, Br_b, "ae", "jae") \
|
| - X(Br_b, Br_ae, "b", "jb") \
|
| - X(Br_be, Br_a, "be", "jbe") \
|
| - X(Br_e, Br_ne, "e", "je") \
|
| - X(Br_g, Br_le, "g", "jg") \
|
| - X(Br_ge, Br_l, "ge", "jge") \
|
| - X(Br_l, Br_ge, "l", "jl") \
|
| - X(Br_le, Br_g, "le", "jle") \
|
| - X(Br_ne, Br_e, "ne", "jne") \
|
| - X(Br_np, Br_p, "np", "jnp") \
|
| - X(Br_p, Br_np, "p", "jp") \
|
| -//#define X(tag, opp, dump, emit)
|
| + /* enum value, encode, opposite, dump, emit */ \
|
| + X(Br_o, = 0, Br_no, "o", "jo") \
|
| + X(Br_no, = 1, Br_o, "no", "jno") \
|
| + X(Br_b, = 2, Br_ae, "b", "jb") \
|
| + X(Br_ae, = 3, Br_b, "ae", "jae") \
|
| + X(Br_e, = 4, Br_ne, "e", "je") \
|
| + X(Br_ne, = 5, Br_e, "ne", "jne") \
|
| + X(Br_be, = 6, Br_a, "be", "jbe") \
|
| + X(Br_a, = 7, Br_be, "a", "ja") \
|
| + X(Br_s, = 8, Br_ns, "s", "js") \
|
| + X(Br_ns, = 9, Br_s, "ns", "jns") \
|
| + X(Br_p, = 10, Br_np, "p", "jp") \
|
| + X(Br_np, = 11, Br_p, "np", "jnp") \
|
| + X(Br_l, = 12, Br_ge, "l", "jl") \
|
| + X(Br_ge, = 13, Br_l, "ge", "jge") \
|
| + X(Br_le, = 14, Br_g, "le", "jle") \
|
| + X(Br_g, = 15, Br_le, "g", "jg") \
|
| +//#define X(tag, encode, opp, dump, emit)
|
|
|
| #define ICEINSTX8632CMPPS_TABLE \
|
| /* enum value, emit */ \
|
|
|