* call bugfix

* operand with regs bugfix (manual patch in both cases)
This commit is contained in:
carl 1998-05-28 16:34:36 +00:00
parent 70767111e0
commit e115dd9f08

View File

@ -1641,10 +1641,6 @@ const
{ at least that is what it seems in the tasm 2.0 manual. }
OPR_CONSTANT: p^.concat(new(pai386,op_const(instruc,
S_NO, instr.operands[1].val)));
{ the size of the operand can be determined by the as,nasm and }
{ tasm -- see note in rai386.pas }
OPR_REGISTER: p^.concat(new(pai386,op_reg(instruc,
S_NO,instr.operands[1].reg)));
OPR_REFERENCE:
{ now first check suffix ... }
if instr.stropsize <> S_NO then
@ -1654,7 +1650,7 @@ const
end
{ no suffix... therefore resort using intel styled checking .. }
else
if instr.operands[1].size <> S_NO then
if (instr.operands[1].size <> S_NO) and NOT (instruc in [A_CALL,A_JMP]) then
Begin
p^.concat(new(pai386,op_ref(instruc,
instr.operands[1].size,newreference(instr.operands[1].ref))));
@ -1680,6 +1676,28 @@ const
else
Message(assem_e_invalid_opcode_and_operand);
end;
end
else
Begin
{ special jmp and call case with }
{ symbolic references. }
if (instruc in [A_CALL,A_JMP]) or
(instruc = A_FNSTCW) or
(instruc = A_FSTCW) or
(instruc = A_FLDCW) or
(instruc = A_FNSTSW) or
(instruc = A_FSTSW) or
(instruc = A_FLDENV) or
(instruc = A_FSTENV) or
(instruc = A_FNSAVE) or
(instruc = A_FSAVE) then
Begin
p^.concat(new(pai386,op_ref(instruc,
S_NO,newreference(instr.operands[1].ref))));
end
else
Message(assem_e_invalid_opcode_and_operand);
end;
{ This either crashed the compiler or the symbol would always be nil! }
{ The problem is here is I didn't see any way of adding the labeled }
{ symbol in the internal list, since i think from what i see in aasm }
@ -3681,7 +3699,11 @@ end.
{
$Log$
Revision 1.7 1998-05-23 01:21:27 peter
Revision 1.8 1998-05-28 16:34:36 carl
* call bugfix
* operand with regs bugfix (manual patch in both cases)
Revision 1.7 1998/05/23 01:21:27 peter
+ aktasmmode, aktoptprocessor, aktoutputformat
+ smartlink per module $SMARTLINK-/+ (like MMX) and moved to aktswitches
+ $LIBNAME to set the library name where the unit will be put in