|
@@ -248,7 +248,8 @@ begin
|
|
|
end;
|
|
|
|
|
|
Function Tx86Operand.CheckOperand: boolean;
|
|
|
-
|
|
|
+var
|
|
|
+ ErrorRefStr: string;
|
|
|
begin
|
|
|
result:=true;
|
|
|
if (opr.typ=OPR_Reference) then
|
|
@@ -257,10 +258,36 @@ begin
|
|
|
begin
|
|
|
if (getsupreg(opr.ref.base)=RS_EBP) and (opr.ref.offset>0) then
|
|
|
begin
|
|
|
+ if current_settings.asmmode in [asmmode_i8086_intel,asmmode_i386_intel,asmmode_x86_64_intel] then
|
|
|
+ begin
|
|
|
+ case getsubreg(opr.ref.base) of
|
|
|
+ R_SUBW:
|
|
|
+ ErrorRefStr:='[BP+offset]';
|
|
|
+ R_SUBD:
|
|
|
+ ErrorRefStr:='[EBP+offset]';
|
|
|
+ R_SUBQ:
|
|
|
+ ErrorRefStr:='[RBP+offset]';
|
|
|
+ else
|
|
|
+ internalerror(2019061001);
|
|
|
+ end;
|
|
|
+ end
|
|
|
+ else
|
|
|
+ begin
|
|
|
+ case getsubreg(opr.ref.base) of
|
|
|
+ R_SUBW:
|
|
|
+ ErrorRefStr:='+offset(%bp)';
|
|
|
+ R_SUBD:
|
|
|
+ ErrorRefStr:='+offset(%ebp)';
|
|
|
+ R_SUBQ:
|
|
|
+ ErrorRefStr:='+offset(%rbp)';
|
|
|
+ else
|
|
|
+ internalerror(2019061002);
|
|
|
+ end;
|
|
|
+ end;
|
|
|
if current_procinfo.procdef.proccalloption=pocall_register then
|
|
|
- message(asmr_w_no_direct_ebp_for_parameter)
|
|
|
+ message1(asmr_w_no_direct_ebp_for_parameter,ErrorRefStr)
|
|
|
else
|
|
|
- message(asmr_w_direct_ebp_for_parameter_regcall);
|
|
|
+ message1(asmr_w_direct_ebp_for_parameter_regcall,ErrorRefStr);
|
|
|
end
|
|
|
else if (getsupreg(opr.ref.base)=RS_EBP) and (opr.ref.offset<0) then
|
|
|
message(asmr_w_direct_ebp_neg_offset)
|