mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-16 23:21:57 +02:00
* correctly handle negative paraloc shift values for non power-of-2 sized
paralocs (e.g. a 3 byte record) in case the data's size has been rounded up to the next power of two as far as the paraloc is concerned (because those 3 bytes had to be shifted to be located in the upper 3 bytes of a 4 byte location) git-svn-id: trunk@32633 -
This commit is contained in:
parent
a1db947e9e
commit
1320d6bdba
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user