Browse Source

* correct handling of constant operands of aad/aam

git-svn-id: trunk@12158 -
florian 16 years ago
parent
commit
80ff09c6f4
1 changed files with 2 additions and 1 deletions
  1. 2 1
      compiler/x86/aasmcpu.pas

+ 2 - 1
compiler/x86/aasmcpu.pas

@@ -997,7 +997,8 @@ implementation
               top_const :
               top_const :
                 begin
                 begin
                   { allow 2nd or 3rd operand being a constant and expect no size for shuf* etc. }
                   { allow 2nd or 3rd operand being a constant and expect no size for shuf* etc. }
-                  if (opsize=S_NO) and not(i in [1,2]) then
+                  { further, allow AAD and AAM with imm. operand }
+                  if (opsize=S_NO) and not((i in [1,2]) or ((i=0) and (opcode in [A_AAD,A_AAM]))) then
                     message(asmr_e_invalid_opcode_and_operand);
                     message(asmr_e_invalid_opcode_and_operand);
                   if (opsize<>S_W) and (aint(val)>=-128) and (val<=127) then
                   if (opsize<>S_W) and (aint(val)>=-128) and (val<=127) then
                     ot:=OT_IMM8 or OT_SIGNED
                     ot:=OT_IMM8 or OT_SIGNED