mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-28 15:00:29 +02:00
* also insert an explicit conversion from byte/char/bytebool/... to smallint
on Dalvik, because those values are obtained via an "and 255" operation which again turns them into longint values as var as the Dalvik type system is concerned git-svn-id: branches/jvmbackend@20527 -
This commit is contained in:
parent
83235a483b
commit
fc6be612fd
@ -1993,10 +1993,19 @@ implementation
|
||||
above. We still may have to truncare or sign extend in case the
|
||||
destination type is smaller that the source type, or has a different
|
||||
sign. In case the destination is a widechar and the source is not, we
|
||||
also have to insert a conversion to widechar }
|
||||
also have to insert a conversion to widechar.
|
||||
|
||||
In case of Dalvik, we also have to insert conversions for e.g. byte
|
||||
-> smallint, because truncating a byte happens via "and 255", and the
|
||||
result is a longint in Dalvik's type verification model (so we have
|
||||
to "truncate" it back to smallint) }
|
||||
if (not(fromcgsize in [OS_S64,OS_64,OS_32,OS_S32]) or
|
||||
not(tocgsize in [OS_S64,OS_64,OS_32,OS_S32])) and
|
||||
((tcgsize2size[fromcgsize]>tcgsize2size[tocgsize]) or
|
||||
(((current_settings.cputype=cpu_dalvik) and
|
||||
not(tocgsize in [OS_32,OS_S32]) and
|
||||
not is_signed(fromsize) and
|
||||
is_signed(tosize)) or
|
||||
(tcgsize2size[fromcgsize]>tcgsize2size[tocgsize]) or
|
||||
((tcgsize2size[fromcgsize]=tcgsize2size[tocgsize]) and
|
||||
(fromcgsize<>tocgsize)) or
|
||||
{ needs to mask out the sign in the top 16 bits }
|
||||
|
Loading…
Reference in New Issue
Block a user