123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413 |
- {****************************************************************}
- { CODE GENERATOR TEST PROGRAM }
- {****************************************************************}
- { NODE TESTED : secondtypeconvert() -> second_int_to_int }
- {****************************************************************}
- { PRE-REQUISITES: secondload() }
- { secondassign() }
- { secondcalln() }
- { secondinline() }
- { secondadd() }
- {****************************************************************}
- { DEFINES: }
- {****************************************************************}
- { REMARKS: }
- {****************************************************************}
- program tcnvint3;
- {$ifdef VER70}
- {$define tp}
- {$endif}
- {$R-}
- {$ifdef tp}
- type
- smallint = integer;
- {$endif}
- procedure fail;
- begin
- WriteLn('Failure.');
- halt(1);
- end;
- const
- ABSOLUTE_GETS8BIT_RESULT = 63;
- GETS8BIT_RESULT = -63;
- GETU8BIT_RESULT = $55;
- ABSOLUTE_GETS16BIT_RESULT = 16384;
- GETS16BIT_RESULT = -16384;
- GETU16BIT_RESULT = 32767;
- GETS32BIT_RESULT = -1000000;
- GETU32BIT_RESULT = 2000000;
- {$ifndef tp}
- function gets64bit : int64;
- begin
- gets64bit := 12;
- end;
- {$endif}
- function gets32bit : longint;
- begin
- gets32bit := GETS32BIT_RESULT;
- end;
- { return an 8-bit signed value }
- function gets8bit : shortint;
- begin
- gets8bit := GETS8BIT_RESULT;
- end;
- { return an 8-bit unsigned value }
- function getu8bit : byte;
- begin
- getu8bit := GETU8BIT_RESULT;
- end;
- function gets16bit : smallint;
- begin
- gets16bit := GETS16BIT_RESULT;
- end;
- function getu16bit : word;
- begin
- getu16bit := GETU16BIT_RESULT;
- end;
- {$ifndef tp}
- function getu32bit : longword;
- begin
- getu32bit := GETU32BIT_RESULT;
- end;
- {$endif tp}
- var
- s8bit : shortint;
- s16bit : smallint;
- s32bit : longint;
- u16bit : word;
- u8bit : byte;
- failed : boolean;
- {$ifndef tp}
- s64bit : int64;
- u32bit : cardinal;
- {$endif}
- begin
- {--------------------- dst_size < src_size -----------------------}
- { Actually the destination is always a natural register }
- { either 32-bit / 64-bit, therefore not really important }
- { to do extensive checking on these nodes. }
- { src : LOC_REGISTER }
- { dst : LOC_REGISTER }
- writeln('type conversion src_size > dst_size');
- writeln('dst : LOC_REGISTER src : LOC_REGISTER ');
- {$ifndef tp}
- write('Testing dst : s32bit src : s64bit...');
- { s64bit -> s32bit }
- s32bit:=gets64bit;
- if s32bit <> 12 then
- Fail
- else
- WriteLn('Passed.');
- { s64bit -> s8bit }
- write('Testing dst : s8bit src : s64bit...');
- s8bit:=gets64bit;
- if s8bit <> 12 then
- Fail
- else
- WriteLn('Passed.');
- {$endif}
- { s32bit -> s16bit }
- write('Testing dst : s16bit src : s32bit...');
- s16bit := gets32bit;
- if s16bit <> smallint(GETS32BIT_RESULT AND $FFFF) then
- Fail
- else
- WriteLn('Passed.');
- { Here we will check each possible case of src, to test also the load }
- { of different memory sizes cases. }
- { src : LOC_REFERENCE }
- { dst : LOC_REGISTER }
- {$ifndef tp}
- writeln('dst : LOC_REGISTER src : LOC_REFERENCE ');
- write('Testing dst : s32bit src : s64bit...');
- s64bit:=$FF0000;
- s32bit:=s64bit;
- if s32bit <> $FF0000 then
- Fail
- else
- WriteLn('Passed.');
- {$endif}
- write('Testing dst : s16bit src : s32bit...');
- s32bit:=$FF00;
- s16bit:=s32bit;
- if s16bit <> smallint($FF00) then
- Fail
- else
- WriteLn('Passed.');
- { try a signed value }
- write('Testing dst : s16bit src : s32bit...');
- s32bit:=-14;
- s16bit:=s32bit;
- if s16bit <> smallint(-14) then
- Fail
- else
- WriteLn('Passed.');
- s16bit:=$FF;
- write('Testing dst : s8bit src : s16bit...');
- s8bit:=s16bit;
- if s8bit <> shortint($FF) then
- Fail
- else
- WriteLn('Passed.');
- {$ifndef tp}
- write('Testing dst : u16bit src : u32bit...');
- u32bit:=$F001;
- u16bit := u32bit;
- if u16bit <> $F001 then
- Fail
- else
- WriteLn('Passed.');
- {$endif}
- write('Testing dst : u8bit src : u16bit...');
- u16bit := $10;
- u8bit := u16bit;
- if u8bit <> $10 then
- Fail
- else
- WriteLn('Passed.');
- { That was the easy part... now : dst_size > src_size }
- { here we must take care of sign extension }
- { src : LOC_REGISTER }
- { dst : LOC_REGISTER }
- writeln('type conversion dst_size > src_size');
- writeln('dst : LOC_REGISTER src : LOC_REGISTER ');
- failed := false;
- write('Testing dst : u16bit src : s8bit, u8bit... ');
- u16bit:=gets8bit;
- if u16bit <> word(GETS8BIT_RESULT) then
- failed := true;
- u16bit:=getu8bit;
- if u16bit <> GETU8BIT_RESULT then
- failed := true;
- if failed then
- Fail
- else
- WriteLn('Passed.');
- {$ifndef tp}
- failed := false;
- write('Testing dst : u32bit src : s8bit, u8bit, s16bit, u16bit... ');
- u32bit:=gets8bit;
- if u32bit <> cardinal(GETS8BIT_RESULT) then
- failed := true;
- u32bit:=getu8bit;
- if u32bit <> GETU8BIT_RESULT then
- failed := true;
- u32bit:=gets16bit;
- if u32bit <> cardinal(GETS16BIT_RESULT) then
- failed := true;
- u32bit:=getu16bit;
- if u32bit <> GETU16BIT_RESULT then
- failed := true;
- if failed then
- Fail
- else
- WriteLn('Passed.');
- {$endif}
- failed := false;
- write('Testing dst : s16bit src : s8bit, u8bit...');
- s16bit := gets8bit;
- if s16bit <> GETS8BIT_RESULT then
- failed := true;
- s16bit := getu8bit;
- if s16bit <> GETU8BIT_RESULT then
- failed := true;
- if failed then
- Fail
- else
- WriteLn('Passed.');
- failed := false;
- write('Testing dst : s32bit src : s8bit, u8bit. s16bit, u16bit...');
- s32bit := gets8bit;
- if s32bit <> GETS8BIT_RESULT then
- failed := true;
- s32bit := getu8bit;
- if s32bit <> GETU8BIT_RESULT then
- failed := true;
- s32bit := gets16bit;
- if s32bit <> GETS16BIT_RESULT then
- failed := true;
- s32bit := getu16bit;
- if s32bit <> GETU16BIT_RESULT then
- failed := true;
- if failed then
- Fail
- else
- WriteLn('Passed.');
- {$ifndef tp}
- failed := false;
- write('Testing dst : s64bit src : s8bit, u8bit. s16bit, u16bit, s32bit, u32bit...');
- s64bit := gets8bit;
- if s64bit <> GETS8BIT_RESULT then
- failed := true;
- s64bit := getu8bit;
- if s64bit <> GETU8BIT_RESULT then
- failed := true;
- s64bit := gets16bit;
- if s64bit <> GETS16BIT_RESULT then
- failed := true;
- s64bit := getu16bit;
- if s64bit <> GETU16BIT_RESULT then
- failed := true;
- s64bit := gets32bit;
- if s64bit <> GETS32BIT_RESULT then
- failed := true;
- s64bit := getu32bit;
- if s64bit <> GETU32BIT_RESULT then
- failed := true;
- if failed then
- Fail
- else
- WriteLn('Passed.');
- {$endif}
- { src : LOC_REFERENCE }
- { dst : LOC_REGISTER }
- writeln('type conversion dst_size > src_size');
- writeln('dst : LOC_REGISTER src : LOC_REFERENCE ');
- failed := false;
- write('Testing dst : u16bit src : s8bit, u8bit... ');
- s8bit := GETS8BIT_RESULT;
- u16bit:=s8bit;
- if u16bit <> word(GETS8BIT_RESULT) then
- failed := true;
- u8bit := GETU8BIT_RESULT;
- u16bit:=u8bit;
- if u16bit <> GETU8BIT_RESULT then
- failed := true;
- if failed then
- Fail
- else
- WriteLn('Passed.');
- {$ifndef tp}
- failed := false;
- write('Testing dst : u32bit src : s8bit, u8bit, s16bit, u16bit... ');
- s8bit := GETS8BIT_RESULT;
- u32bit:=s8bit;
- if u32bit <> cardinal(GETS8BIT_RESULT) then
- failed := true;
- u8bit := GETU8BIT_RESULT;
- u32bit:=u8bit;
- if u32bit <> GETU8BIT_RESULT then
- failed := true;
- s16bit := GETS16BIT_RESULT;
- u32bit:=s16bit;
- if u32bit <> cardinal(GETS16BIT_RESULT) then
- failed := true;
- u16bit := GETU16BIT_RESULT;
- u32bit:=u16bit;
- if u32bit <> GETU16BIT_RESULT then
- failed := true;
- if failed then
- Fail
- else
- WriteLn('Passed.');
- {$endif}
- failed := false;
- write('Testing dst : s16bit src : s8bit, u8bit...');
- s8bit := GETS8BIT_RESULT;
- s16bit := s8bit;
- if s16bit <> GETS8BIT_RESULT then
- failed := true;
- u8bit := GETU8BIT_RESULT;
- s16bit := u8bit;
- if s16bit <> GETU8BIT_RESULT then
- failed := true;
- if failed then
- Fail
- else
- WriteLn('Passed.');
- failed := false;
- write('Testing dst : s32bit src : s8bit, u8bit. s16bit, u16bit...');
- s8bit := GETS8BIT_RESULT;
- s32bit := s8bit;
- if s32bit <> GETS8BIT_RESULT then
- failed := true;
- u8bit := GETU8BIT_RESULT;
- s32bit := u8bit;
- if s32bit <> GETU8BIT_RESULT then
- failed := true;
- s16bit := GETS16BIT_RESULT;
- s32bit := s16bit;
- if s32bit <> GETS16BIT_RESULT then
- failed := true;
- u16bit := GETU16BIT_RESULT;
- s32bit := u16bit;
- if s32bit <> GETU16BIT_RESULT then
- failed := true;
- if failed then
- Fail
- else
- WriteLn('Passed.');
- {$ifndef tp}
- failed := false;
- write('Testing dst : s64bit src : s8bit, u8bit. s16bit, u16bit, s32bit, u32bit...');
- s8bit := GETS8BIT_RESULT;
- s64bit := s8bit;
- if s64bit <> GETS8BIT_RESULT then
- failed := true;
- u8bit := GETU8BIT_RESULT;
- s64bit := u8bit;
- if s64bit <> GETU8BIT_RESULT then
- failed := true;
- s16bit := GETS16BIT_RESULT;
- s64bit := s16bit;
- if s64bit <> GETS16BIT_RESULT then
- failed := true;
- u16bit := GETU16BIT_RESULT;
- s64bit := u16bit;
- if s64bit <> GETU16BIT_RESULT then
- failed := true;
- s32bit := GETS32BIT_RESULT;
- s64bit := s32bit;
- if s64bit <> GETS32BIT_RESULT then
- failed := true;
- u32bit := GETU32BIT_RESULT;
- s64bit := u32bit;
- if s64bit <> GETU32BIT_RESULT then
- failed := true;
- if failed then
- Fail
- else
- WriteLn('Passed.');
- {$endif}
- end.
|