mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-09-07 01:54:50 +00:00
The long awaited CAST patch. This introduces 12 new instructions into LLVM to replace the cast instruction. Corresponding changes throughout LLVM are provided. This passes llvm-test, llvm/test, and SPEC CPUINT2000 with the exception of 175.vpr which fails only on a slight floating point output difference. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@31931 91177308-0d34-0410-b5e6-96231b3b80d8
30 lines
861 B
LLVM
30 lines
861 B
LLVM
; RUN: llvm-as %s -o - | llvm-dis > %t1.ll
|
|
; RUN: llvm-as %t1.ll -o - | llvm-dis > %t2.ll
|
|
; RUN: diff %t1.ll %t2.ll
|
|
|
|
void "NewCasts" (short %x) {
|
|
%a = zext short %x to int
|
|
%b = sext short %x to uint
|
|
%c = trunc short %x to ubyte
|
|
%d = uitofp short %x to float
|
|
%e = sitofp short %x to double
|
|
%f = fptoui float %d to short
|
|
%g = fptosi double %e to short
|
|
%i = fpext float %d to double
|
|
%j = fptrunc double %i to float
|
|
%k = bitcast int %a to float
|
|
%l = inttoptr short %x to int*
|
|
%m = ptrtoint int* %l to long
|
|
ret void
|
|
}
|
|
|
|
short "FunFunc"(long %x, sbyte %z)
|
|
begin
|
|
bb0: ;;<label>
|
|
%cast110 = cast sbyte %z to short ;;<short>:(signed operands)
|
|
%cast10 = cast long %x to short ;;<short>
|
|
%reg109 = add short %cast110, %cast10 ;;<short>
|
|
ret short %reg109 ;;<void>
|
|
end
|
|
|