Am 25.08.2020 um 23:47 schrieb Benito van der Zander via fpc-pascal:
Hi,
that is generating rather odd code (r40721)
project1.lpr:9 begin
0000000000401090 55 push %rbp
0000000000401091 4889e5 mov %rsp,%rbp
0000000000401094 488d6424f0 lea -0x10(%rsp),%rsp
0000000000401099 48895df8 mov %rbx,-0x8(%rbp)
project1.lpr:10 if TypeInfo(T) =
TypeInfo(Integer) then WriteLn('an integer');
000000000040109D 488d1584af0700 lea
0x7af84(%rip),%rdx # 0x47c028 <RTTI_$SYSTEM_$$_LONGINT>
00000000004010A4 488d057daf0700 lea
0x7af7d(%rip),%rax # 0x47c028 <RTTI_$SYSTEM_$$_LONGINT>
00000000004010AB 4839c2 cmp %rax,%rdx
00000000004010AE 752b jne 0x4010db
<ADD$1$CRC713F463B+75>
00000000004010B0 e8cbcf0100 callq 0x41e080 <fpc_get_output>
00000000004010B5 4889c3 mov %rax,%rbx
00000000004010B8 488d15412f0600 lea
0x62f41(%rip),%rdx # 0x464000 <_$PROJECT1$_Ld1>
00000000004010BF 4889de mov %rbx,%rsi
00000000004010C2 31ff xor %edi,%edi
00000000004010C4 e867d30100 callq 0x41e430
<fpc_write_text_shortstr>
00000000004010C9 e8d2700100 callq 0x4181a0 <fpc_iocheck>
00000000004010CE 4889df mov %rbx,%rdi
00000000004010D1 e85ad20100 callq 0x41e330
<fpc_writeln_end>
00000000004010D6 e8c5700100 callq 0x4181a0 <fpc_iocheck>
project1.lpr:11 if TypeInfo(T) =
TypeInfo(String) then WriteLn('a string');
00000000004010DB 488d0546af0700 lea
0x7af46(%rip),%rax # 0x47c028 <RTTI_$SYSTEM_$$_LONGINT>
00000000004010E2 488d1537b20700 lea
0x7b237(%rip),%rdx # 0x47c320 <RTTI_$SYSTEM_$$_SHORTSTRING>
00000000004010E9 4839d0 cmp %rdx,%rax
00000000004010EC 752b jne 0x401119
<ADD$1$CRC713F463B+137>
00000000004010EE e88dcf0100 callq 0x41e080 <fpc_get_output>
00000000004010F3 4889c3 mov %rax,%rbx
00000000004010F6 488d15132f0600 lea
0x62f13(%rip),%rdx # 0x464010 <_$PROJECT1$_Ld2>
00000000004010FD 4889de mov %rbx,%rsi
0000000000401100 31ff xor %edi,%edi
0000000000401102 e829d30100 callq 0x41e430
<fpc_write_text_shortstr>
0000000000401107 e894700100 callq 0x4181a0 <fpc_iocheck>
000000000040110C 4889df mov %rbx,%rdi
000000000040110F e81cd20100 callq 0x41e330
<fpc_writeln_end>
0000000000401114 e887700100 callq 0x4181a0 <fpc_iocheck>
project1.lpr:12 end;
The compiler should know everything about TypeInfo(T) and optimize it
away where possible
For the compiler these are simply ordinary pointers, it does not (yet)
have any knowledge about "constant" pointers. Though there is a bug
report about that exact problem somewhere...
Regards,
Sven
_______________________________________________
fpc-pascal maillist - fpc-pascal@lists.freepascal.org
https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal