Browse Source

* fixed fldl where suffix would get S_L instead of S_FL

peter 25 years ago
parent
commit
c6c6c51c9d
1 changed files with 34 additions and 7 deletions
  1. 34 7
      compiler/ra386att.pas

+ 34 - 7
compiler/ra386att.pas

@@ -121,15 +121,33 @@ end;
   {                    Routines for the tokenizing                     }
   {---------------------------------------------------------------------}
 
+function is_fpuopcode(op:tasmop):boolean;
+{$ifndef NOAG386BIN}
+var
+  i : longint;
+{$endif}
+begin
+  is_fpuopcode:=false;
+{$ifndef NOAG386BIN}
+  i:=InsTabCache^[ActOpcode];
+  if i<>-1 then
+   is_fpuopcode:=((instab[i].flags and IF_FPU)=IF_FPU);
+{$endif}
+end;
+
+
 function is_asmopcode(const s: string):boolean;
 const
   { We need first to check the long prefixes, else we get probs
     with things like movsbl }
-  att_sizesuffixstr : array[0..8] of string[2] = (
-    '','BW','BL','WL','B','W','L','Q','T'
+  att_sizesuffixstr : array[0..9] of string[2] = (
+    '','BW','BL','WL','B','W','L','S','Q','T'
+  );
+  att_sizesuffix : array[0..9] of topsize = (
+    S_NO,S_BW,S_BL,S_WL,S_B,S_W,S_L,S_FS,S_IQ,S_FX
   );
-  att_sizesuffix : array[0..8] of topsize = (
-    S_NO,S_BW,S_BL,S_WL,S_B,S_W,S_L,S_IQ,S_FX
+  att_sizefpusuffix : array[0..9] of topsize = (
+    S_NO,S_NO,S_NO,S_NO,S_NO,S_NO,S_FL,S_FS,S_IQ,S_FX
   );
 var
   i    : tasmop;
@@ -157,8 +175,11 @@ Begin
         for i:=firstop to lastop do
          if (length(hid) > 0) and (hid=iasmops^[i]) then
           begin
-            actopsize:=att_sizesuffix[sufidx];
             actopcode:=i;
+            if is_fpuopcode(actopcode) then
+             actopsize:=att_sizefpusuffix[sufidx]
+            else
+             actopsize:=att_sizesuffix[sufidx];
             actasmtoken:=AS_OPCODE;
             is_asmopcode:=TRUE;
             exit;
@@ -176,7 +197,10 @@ Begin
                   if Cond=Upper(cond2str[cnd]) then
                    begin
                      actopcode:=CondASmOp[j];
-                     actopsize:=att_sizesuffix[sufidx];
+                     if is_fpuopcode(actopcode) then
+                      actopsize:=att_sizefpusuffix[sufidx]
+                     else
+                      actopsize:=att_sizesuffix[sufidx];
                      actcondition:=cnd;
                      actasmtoken:=AS_OPCODE;
                      is_asmopcode:=TRUE;
@@ -1976,7 +2000,10 @@ begin
 end.
 {
   $Log$
-  Revision 1.66  2000-01-07 01:14:34  peter
+  Revision 1.67  2000-01-20 23:35:01  peter
+    * fixed fldl where suffix would get S_L instead of S_FL
+
+  Revision 1.66  2000/01/07 01:14:34  peter
     * updated copyright to 2000
 
   Revision 1.65  1999/12/12 12:57:59  peter