aboutsummaryrefslogtreecommitdiff
path: root/x86_64-asm.h
diff options
context:
space:
mode:
authorMichael Matz <matz@suse.de>2016-08-06 23:19:04 +0200
committerMichael Matz <matz@suse.de>2016-12-15 17:47:10 +0100
commitc0368604e196d53b281cd2aceb140b5facd36ed7 (patch)
tree79e43dc55a8404909231fe2f91516df9a0ebcc52 /x86_64-asm.h
parent45b24c37a0ea8886ac13c7a93741566c197071f4 (diff)
downloadtinycc-c0368604e196d53b281cd2aceb140b5facd36ed7.tar.gz
tinycc-c0368604e196d53b281cd2aceb140b5facd36ed7.tar.bz2
x86-64-asm: Fix ltr/str and push/pop operands
str accepts rm16/r32/r64, and push/pop defaults to 64 when given memory operands (to 32 on i386).
Diffstat (limited to 'x86_64-asm.h')
-rw-r--r--x86_64-asm.h6
1 files changed, 4 insertions, 2 deletions
diff --git a/x86_64-asm.h b/x86_64-asm.h
index c9d2293..4db3268 100644
--- a/x86_64-asm.h
+++ b/x86_64-asm.h
@@ -367,14 +367,16 @@ ALT(DEF_ASM_OP2(larw, 0x0f02, 0, OPC_MODRM | OPC_WLX, OPT_REG | OPT_EA, OPT_REG)
DEF_ASM_OP1(lldt, 0x0f00, 2, OPC_MODRM, OPT_EA | OPT_REG)
DEF_ASM_OP1(lmsw, 0x0f01, 6, OPC_MODRM, OPT_EA | OPT_REG)
ALT(DEF_ASM_OP2(lslw, 0x0f03, 0, OPC_MODRM | OPC_WLX, OPT_EA | OPT_REG, OPT_REG))
- DEF_ASM_OP1(ltr, 0x0f00, 3, OPC_MODRM, OPT_EA | OPT_REG)
+ DEF_ASM_OP1(ltr, 0x0f00, 3, OPC_MODRM, OPT_EA | OPT_REG16)
DEF_ASM_OP1(sgdt, 0x0f01, 0, OPC_MODRM, OPT_EA)
DEF_ASM_OP1(sgdtq, 0x0f01, 0, OPC_MODRM, OPT_EA)
DEF_ASM_OP1(sidt, 0x0f01, 1, OPC_MODRM, OPT_EA)
DEF_ASM_OP1(sidtq, 0x0f01, 1, OPC_MODRM, OPT_EA)
DEF_ASM_OP1(sldt, 0x0f00, 0, OPC_MODRM, OPT_REG | OPT_EA)
DEF_ASM_OP1(smsw, 0x0f01, 4, OPC_MODRM, OPT_REG | OPT_EA)
- DEF_ASM_OP1(str, 0x0f00, 1, OPC_MODRM, OPT_REG16| OPT_EA)
+ DEF_ASM_OP1(str, 0x0f00, 1, OPC_MODRM, OPT_REG32 | OPT_EA)
+ALT(DEF_ASM_OP1(str, 0x660f00, 1, OPC_MODRM, OPT_REG16))
+ALT(DEF_ASM_OP1(str, 0x480f00, 1, OPC_MODRM, OPT_REG64))
DEF_ASM_OP1(verr, 0x0f00, 4, OPC_MODRM, OPT_REG | OPT_EA)
DEF_ASM_OP1(verw, 0x0f00, 5, OPC_MODRM, OPT_REG | OPT_EA)
DEF_ASM_OP0L(swapgs, 0x0f01, 7, OPC_MODRM)