From e115dd9f08a5ce0efe83c5cbf71b043e6989b044 Mon Sep 17 00:00:00 2001 From: carl Date: Thu, 28 May 1998 16:34:36 +0000 Subject: [PATCH] * call bugfix * operand with regs bugfix (manual patch in both cases) --- compiler/ratti386.pas | 34 ++++++++++++++++++++++++++++------ 1 file changed, 28 insertions(+), 6 deletions(-) diff --git a/compiler/ratti386.pas b/compiler/ratti386.pas index efb56e3fbb..8bc2b0bb72 100644 --- a/compiler/ratti386.pas +++ b/compiler/ratti386.pas @@ -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