|
@@ -1096,8 +1096,12 @@ implementation
|
|
|
cgsize:=paraloc.size;
|
|
|
if paraloc.shiftval>0 then
|
|
|
a_op_const_reg_reg(list,OP_SHL,OS_INT,paraloc.shiftval,paraloc.register,paraloc.register)
|
|
|
+ { in case the original size was 3 or 5/6/7 bytes, the value was
|
|
|
+ shifted to the top of the to 4 resp. 8 byte register on the
|
|
|
+ caller side and needs to be stored with those bytes at the
|
|
|
+ start of the reference -> don't shift right }
|
|
|
else if (paraloc.shiftval<0) and
|
|
|
- (sizeleft in [1,2,4]) then
|
|
|
+ ((-paraloc.shiftval) in [1,2,4]) then
|
|
|
begin
|
|
|
a_op_const_reg_reg(list,OP_SHR,OS_INT,-paraloc.shiftval,paraloc.register,paraloc.register);
|
|
|
{ convert to a register of 1/2/4 bytes in size, since the
|