From a19ed91cc38df474591babeb29d6a03525e7045b Mon Sep 17 00:00:00 2001 From: florian Date: Sat, 10 Feb 2007 21:05:27 +0000 Subject: [PATCH] * fix for jcxz, jecxz and jrcxz on 64 bit platforms git-svn-id: trunk@6400 - --- compiler/i386/i386att.inc | 1 + compiler/i386/i386atts.inc | 1 + compiler/i386/i386int.inc | 1 + compiler/i386/i386op.inc | 1 + compiler/i386/i386prop.inc | 1 + compiler/i386/i386tab.inc | 8 ++++---- compiler/x86/x86ins.dat | 9 +++++++-- compiler/x86_64/x8664ats.inc | 1 + compiler/x86_64/x8664att.inc | 1 + compiler/x86_64/x8664int.inc | 1 + compiler/x86_64/x8664op.inc | 1 + compiler/x86_64/x8664pro.inc | 1 + compiler/x86_64/x8664tab.inc | 18 +++++++++--------- 13 files changed, 30 insertions(+), 15 deletions(-) diff --git a/compiler/i386/i386att.inc b/compiler/i386/i386att.inc index ec14d53e71..fd12a31623 100644 --- a/compiler/i386/i386att.inc +++ b/compiler/i386/i386att.inc @@ -163,6 +163,7 @@ 'iretw', 'jcxz', 'jecxz', +'jrcxz', 'jmp', 'lahf', 'lar', diff --git a/compiler/i386/i386atts.inc b/compiler/i386/i386atts.inc index 376eae5188..854e4aab37 100644 --- a/compiler/i386/i386atts.inc +++ b/compiler/i386/i386atts.inc @@ -163,6 +163,7 @@ attsufNONE, attsufNONE, attsufNONE, attsufNONE, +attsufNONE, attsufINT, attsufNONE, attsufINT, diff --git a/compiler/i386/i386int.inc b/compiler/i386/i386int.inc index 8500347cde..666c0af719 100644 --- a/compiler/i386/i386int.inc +++ b/compiler/i386/i386int.inc @@ -163,6 +163,7 @@ 'iretw', 'jcxz', 'jecxz', +'jrcxz', 'jmp', 'lahf', 'lar', diff --git a/compiler/i386/i386op.inc b/compiler/i386/i386op.inc index 2040a29482..34418c3edb 100644 --- a/compiler/i386/i386op.inc +++ b/compiler/i386/i386op.inc @@ -163,6 +163,7 @@ A_IRETD, A_IRETW, A_JCXZ, A_JECXZ, +A_JRCXZ, A_JMP, A_LAHF, A_LAR, diff --git a/compiler/i386/i386prop.inc b/compiler/i386/i386prop.inc index 36da1552cb..082cfa6dc9 100644 --- a/compiler/i386/i386prop.inc +++ b/compiler/i386/i386prop.inc @@ -163,6 +163,7 @@ (Ch: (Ch_All, Ch_None, Ch_None)), (Ch: (Ch_RECX, Ch_None, Ch_None)), (Ch: (Ch_RECX, Ch_None, Ch_None)), +(Ch: (Ch_RECX, Ch_None, Ch_None)), (Ch: (Ch_ROp1, Ch_None, Ch_None)), (Ch: (Ch_WEAX, Ch_RFlags, Ch_None)), (Ch: (Ch_Wop2, Ch_None, Ch_None)), diff --git a/compiler/i386/i386tab.inc b/compiler/i386/i386tab.inc index 54473957da..19b74ff845 100644 --- a/compiler/i386/i386tab.inc +++ b/compiler/i386/i386tab.inc @@ -2517,15 +2517,15 @@ opcode : A_JCXZ; ops : 1; optypes : (ot_immediate,ot_none,ot_none); - code : #200#1#227#40; - flags : if_8086 + code : #2#103#227#40; + flags : if_8086 or if_nox86_64 ), ( opcode : A_JECXZ; ops : 1; optypes : (ot_immediate,ot_none,ot_none); - code : #201#1#227#40; - flags : if_386 + code : #1#227#40; + flags : if_386 or if_nox86_64 ), ( opcode : A_JMP; diff --git a/compiler/x86/x86ins.dat b/compiler/x86/x86ins.dat index cd249ac8b5..6f4c54ca46 100644 --- a/compiler/x86/x86ins.dat +++ b/compiler/x86/x86ins.dat @@ -855,11 +855,16 @@ void \324\1\xCF 8086 [JCXZ] (Ch_RECX, Ch_None, Ch_None) -imm \310\1\xE3\50 8086 +imm \2\x67\xE3\50 8086,NOX86_64 [JECXZ] (Ch_RECX, Ch_None, Ch_None) -imm \311\1\xE3\50 386 +imm \1\xE3\50 386,NOX86_64 +imm \2\x67\xE3\50 X86_64 + +[JRCXZ] +(Ch_RECX, Ch_None, Ch_None) +imm \1\xE3\50 X86_64 [JMP,jmpX] (Ch_ROp1, Ch_None, Ch_None) diff --git a/compiler/x86_64/x8664ats.inc b/compiler/x86_64/x8664ats.inc index 376eae5188..854e4aab37 100644 --- a/compiler/x86_64/x8664ats.inc +++ b/compiler/x86_64/x8664ats.inc @@ -163,6 +163,7 @@ attsufNONE, attsufNONE, attsufNONE, attsufNONE, +attsufNONE, attsufINT, attsufNONE, attsufINT, diff --git a/compiler/x86_64/x8664att.inc b/compiler/x86_64/x8664att.inc index ec14d53e71..fd12a31623 100644 --- a/compiler/x86_64/x8664att.inc +++ b/compiler/x86_64/x8664att.inc @@ -163,6 +163,7 @@ 'iretw', 'jcxz', 'jecxz', +'jrcxz', 'jmp', 'lahf', 'lar', diff --git a/compiler/x86_64/x8664int.inc b/compiler/x86_64/x8664int.inc index 8500347cde..666c0af719 100644 --- a/compiler/x86_64/x8664int.inc +++ b/compiler/x86_64/x8664int.inc @@ -163,6 +163,7 @@ 'iretw', 'jcxz', 'jecxz', +'jrcxz', 'jmp', 'lahf', 'lar', diff --git a/compiler/x86_64/x8664op.inc b/compiler/x86_64/x8664op.inc index 2040a29482..34418c3edb 100644 --- a/compiler/x86_64/x8664op.inc +++ b/compiler/x86_64/x8664op.inc @@ -163,6 +163,7 @@ A_IRETD, A_IRETW, A_JCXZ, A_JECXZ, +A_JRCXZ, A_JMP, A_LAHF, A_LAR, diff --git a/compiler/x86_64/x8664pro.inc b/compiler/x86_64/x8664pro.inc index 36da1552cb..082cfa6dc9 100644 --- a/compiler/x86_64/x8664pro.inc +++ b/compiler/x86_64/x8664pro.inc @@ -163,6 +163,7 @@ (Ch: (Ch_All, Ch_None, Ch_None)), (Ch: (Ch_RECX, Ch_None, Ch_None)), (Ch: (Ch_RECX, Ch_None, Ch_None)), +(Ch: (Ch_RECX, Ch_None, Ch_None)), (Ch: (Ch_ROp1, Ch_None, Ch_None)), (Ch: (Ch_WEAX, Ch_RFlags, Ch_None)), (Ch: (Ch_Wop2, Ch_None, Ch_None)), diff --git a/compiler/x86_64/x8664tab.inc b/compiler/x86_64/x8664tab.inc index 1d2d4820bb..277102af97 100644 --- a/compiler/x86_64/x8664tab.inc +++ b/compiler/x86_64/x8664tab.inc @@ -2499,19 +2499,19 @@ code : #212#1#207; flags : if_8086 ), - ( - opcode : A_JCXZ; - ops : 1; - optypes : (ot_immediate,ot_none,ot_none); - code : #200#1#227#40; - flags : if_8086 - ), ( opcode : A_JECXZ; ops : 1; optypes : (ot_immediate,ot_none,ot_none); - code : #213#1#227#40; - flags : if_386 + code : #2#103#227#40; + flags : if_x86_64 + ), + ( + opcode : A_JRCXZ; + ops : 1; + optypes : (ot_immediate,ot_none,ot_none); + code : #1#227#40; + flags : if_x86_64 ), ( opcode : A_JMP;