Hi,
I have
unit1.pas:36 i:=Int64(c); 000000000046EEE0 488b45e8 mov -0x18(%rbp),%rax 000000000046EEE4 488945e0 mov %rax,-0x20(%rbp) unit1.pas:38 writeln(i); at Level0 andunit1.pas:36 i:=Int64(c);000000000046EECD 4c8b2424 mov (%rsp),%r12unit1.pas:38 writeln(i);at Level3.I just noticed that you wrote you are expecting 1000. You should expect 10000 since currency has four decimals.V. ______________________________________________________________
Show quoted text 5 lines
Od: LacaK
Komu:
Datum: 18.05.2018 07:54
Předmět: Re: [fpc-pascal] Currency and Int64 casting
Linux 64-bit Lazarus 1.9.0 r57948M FPC 3.1.1 x86_64-linux-qt gives
1.000000000000000000E+00 10000
What is dissassembly for:
i:=Int64(c);?
I have for Win32:
test_curr_int64.lpr:19 i1 := Int64(c); 0040158D a100c04200 mov 0x42c000,%eax 00401592 a310c04200 mov %eax,0x42c010 00401597 a104c04200 mov 0x42c004,%eax 0040159C a314c04200 mov %eax,0x42c014
and for Win64:
test_curr_int64.lpr:19 i1 := Int64(c); 00000001000015BD 488b0d3caa0300 mov 0x3aa3c(%rip),%rcx # 0x10003c000 00000001000015C4 48b84b598638d6c56d34 movabs $0x346dc5d63886594b,%rax 00000001000015CE 48f7e9 imul %rcx 00000001000015D1 48c1fa0b sar $0xb,%rdx 00000001000015D5 48c1e93f shr $0x3f,%rcx 00000001000015D9 4801ca add %rcx,%rdx 00000001000015DC 4889152daa0300 mov %rdx,0x3aa2d(%rip) # 0x10003c010
L.
______________________________________________________________
Show quoted text 5 lines
Od: LacaK
Komu: FPC-Pascal users discussions
Datum: 17.05.2018 13:33
Předmět: [fpc-pascal] Currency and Int64 casting
Hi,
consider following program:
var
c: currency;
begin
c := 1;
writeln(c,' ',Int64(c));
readln;
end.
FPC 3.0.4
On Win32/x86 I get: 1, 1000 (what I am expecting) On Win64/x86_64 I get: 1, 1
Is is as expected ?
Is there safe way for both platforms how to get 1000 (beside that I can use: i: int64 absolute c;)
Thanks
-Laco.