From c6c6c51c9de7ccc10a61be84d8aae58c4f069e08 Mon Sep 17 00:00:00 2001 From: peter Date: Thu, 20 Jan 2000 23:35:01 +0000 Subject: [PATCH] * fixed fldl where suffix would get S_L instead of S_FL --- compiler/ra386att.pas | 41 ++++++++++++++++++++++++++++++++++------- 1 file changed, 34 insertions(+), 7 deletions(-) diff --git a/compiler/ra386att.pas b/compiler/ra386att.pas index b7ded47f98..ecba56a43f 100644 --- a/compiler/ra386att.pas +++ b/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..8] of topsize = ( - S_NO,S_BW,S_BL,S_WL,S_B,S_W,S_L,S_IQ,S_FX + 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_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