Skip to content

Commit 9046964

Browse files
committed
Merge remote-tracking branch 'SARG-FB/gas64_rev' into master
2 parents 6d31ad9 + c132cf3 commit 9046964

File tree

1 file changed

+15
-4
lines changed

1 file changed

+15
-4
lines changed

src/compiler/ir-gas64.bas

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -711,8 +711,13 @@ private sub check_optim(byref code as string)
711711

712712
if part2=prevpart1 then
713713
if part1=prevpart2 then
714-
'asm_info("OPTIMIZATION 1")
715-
code="#O1 "+code
714+
if instr(part2,"[")<>0 and (right(part1,1)="d" or part1[0]=asc("e")) then
715+
''to avoid issue if after 64bit register is used with xmm
716+
writepos=len(ctx.proc_txt)+len(code)+9
717+
code="#O1"+code+newline+string( ctx.indent*3, 32 )+"and "+part1+" ,0xFFFFFFFF"
718+
else
719+
code="#O1 "+code
720+
End If
716721
else
717722
if prevpart2="" then ''todo remove me after fixed
718723
asm_error("prev/part empty "+"part1="+part1+" part2="+part2+" prevpart1="+prevpart1+" prevpart2="+prevpart2)
@@ -5081,11 +5086,17 @@ private sub _emitconvert( byval v1 as IRVREG ptr, byval v2 as IRVREG ptr )
50815086
end if
50825087

50835088
case FB_DATATYPE_LONG,FB_DATATYPE_ULONG
5084-
if v1dtype=FB_DATATYPE_DOUBLE then
5089+
if v2dtype=FB_DATATYPE_ULONG then
5090+
asm_code("mov eax, "+prefix2+op2)
5091+
asm_code("cvtsi2sd xmm0, rax")
5092+
else
50855093
asm_code("cvtsi2sd xmm0, "+prefix2+op2)
5094+
end if
5095+
5096+
if v1dtype=FB_DATATYPE_DOUBLE then
50865097
asm_code("movq "+op1+", xmm0")
50875098
else
5088-
asm_code("cvtsi2ss xmm0, "+prefix2+op2)
5099+
asm_code("cvtsd2ss xmm0, xmm0")
50895100
asm_code("movd "+op1+", xmm0")
50905101
end if
50915102

0 commit comments

Comments
 (0)