|
@@ -559,20 +559,28 @@ begin
|
|
|
{$endif ATTOP}
|
|
|
end;
|
|
|
|
|
|
- if (ops=1) and (opcode=A_INT) then
|
|
|
- siz:=S_B;
|
|
|
-
|
|
|
- if (ops=1) and (opcode=A_RET) then
|
|
|
- siz:=S_W;
|
|
|
-
|
|
|
- if (ops=1) and (opcode=A_PUSH) then
|
|
|
+ {It is valid to specify some instructions without operand size.}
|
|
|
+ if siz=S_NO then
|
|
|
begin
|
|
|
- {We are a 32 compiler, assume 32-bit by default. This is Delphi compatible
|
|
|
- but bad coding practise.}
|
|
|
- siz:=S_L;
|
|
|
- message(asmr_w_unable_to_determine_reference_size_using_dword);
|
|
|
+ if (ops=1) and (opcode=A_INT) then
|
|
|
+ siz:=S_B;
|
|
|
+ if (ops=1) and (opcode=A_RET) then
|
|
|
+ siz:=S_W;
|
|
|
+ if (ops=1) and (opcode=A_PUSH) then
|
|
|
+ begin
|
|
|
+ {We are a 32 compiler, assume 32-bit by default. This is Delphi compatible
|
|
|
+ but bad coding practise.}
|
|
|
+ siz:=S_L;
|
|
|
+ message(asmr_w_unable_to_determine_reference_size_using_dword);
|
|
|
+ end;
|
|
|
+ if (opcode=A_JMP) or (opcode=A_CALL) then
|
|
|
+ if ops=1 then
|
|
|
+ siz:=S_NEAR
|
|
|
+ else
|
|
|
+ siz:=S_FAR;
|
|
|
end;
|
|
|
|
|
|
+
|
|
|
{ GNU AS interprets FDIV without operand differently
|
|
|
for version 2.9.1 and 2.10
|
|
|
we add explicit args to it !! }
|