target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64-S128"
target triple = "x86_64-apple-macosx10.5"
; Begin asmlist al_begin
; Syms - Begin Staticsymtable
; Syms - End Staticsymtable
; [tint643.pp]
; [64] begin
%"typ.PROGRAM.tqwordrec" = type <{ i32, i32 }>
%"typ.SYSTEM.TExceptAddr" = type <{ %"typ.SYSTEM.jmp_buf"*, %"typ.SYSTEM.TExceptAddr"*, i32, i8, i8, i8, i8 }>
%"typ.SYSTEM.TextRec" = type <{ i32, i32, i64, i64, i64, i64, [256 x
i8]*, i8*, i8*, i8*, i8*, [32 x
i8], [256 x
i16], [4 x
i8], [256 x
i8], i16, i8, i8 }>
%"typ.SYSUTILS.EIntOverflow" = type <{ %"typ.SYSUTILS.EInterror" }>
%"typ.PROGRAM.$llvmstruct$d00000004i32" = type <{ i8*, i32 }>
%"typ.SYSUTILS.$vmtdef$EINTOVERFLOW" = type <{ i64, i64, %"typ.SYSTEM.TVmt"**, [256 x
i8]*, i8*, i8*, i8*, i8*, i8*, i8*, %"typ.SYSTEM.tinterfacetable"*, %"typ.SYSTEM.TStringMessageTable"*, void (%"typ.SYSTEM.TObject"*, %"typ.SYSTEM.$vmtdef$TOBJECT"*)*, %"typ.SYSTEM.TObject"* (%"typ.SYSTEM.$vmtdef$TOBJECT"*)*, void (%"typ.SYSTEM.TObject"*)*, i32 (%"typ.SYSTEM.TObject"*, %"typ.SYSTEM.TObject"*, i8*)*, void (%"typ.SYSTEM.TObject"*, i8*)*, void (%"typ.SYSTEM.TObject"*)*, void (%"typ.SYSTEM.TObject"*)*, void (%"typ.SYSTEM.TObject"*, i8*)*, void (%"typ.SYSTEM.TObject"*, i8*)*, void (%"typ.SYSTEM.TObject"*, i8*)*, i8 (%"typ.SYSTEM.TObject"*, %"typ.SYSTEM.TObject"*)*, i64 (%"typ.SYSTEM.TObject"*)*, void (%"typ.SYSUTILS.Exception"*, i8**)*, i8* }>
%"typ.SYSTEM.TObject" = type <{ i8* }>
%"typ.SYSUTILS.EInterror" = type <{ %"typ.SYSUTILS.EExternal" }>
%"typ.SYSTEM.TVmt" = type <{ i64, i64, %"typ.SYSTEM.TVmt"**, [256 x
i8]*, i8*, i8*, i8*, i8*, i8*, i8*, %"typ.SYSTEM.tinterfacetable"*, %"typ.SYSTEM.TStringMessageTable"*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8* }>
%"typ.SYSTEM.tinterfacetable" = type <{ i64, [1 x
%"typ.SYSTEM.tinterfaceentry"] }>
%"typ.SYSTEM.TStringMessageTable" = type <{ i32, i8, i8, i8, i8, [1 x
%"typ.SYSTEM.TMsgStrTable"] }>
%"typ.SYSUTILS.Exception" = type <{ %"typ.SYSTEM.TObject", i8*, i32, i8, i8, i8, i8 }>
%"typ.SYSTEM.$vmtdef$TOBJECT" = type <{ i64, i64, %"typ.SYSTEM.TVmt"**, [256 x
i8]*, i8*, i8*, i8*, i8*, i8*, i8*, %"typ.SYSTEM.tinterfacetable"*, %"typ.SYSTEM.TStringMessageTable"*, void (%"typ.SYSTEM.TObject"*, %"typ.SYSTEM.$vmtdef$TOBJECT"*)*, %"typ.SYSTEM.TObject"* (%"typ.SYSTEM.$vmtdef$TOBJECT"*)*, void (%"typ.SYSTEM.TObject"*)*, i32 (%"typ.SYSTEM.TObject"*, %"typ.SYSTEM.TObject"*, i8*)*, void (%"typ.SYSTEM.TObject"*, i8*)*, void (%"typ.SYSTEM.TObject"*)*, void (%"typ.SYSTEM.TObject"*)*, void (%"typ.SYSTEM.TObject"*, i8*)*, void (%"typ.SYSTEM.TObject"*, i8*)*, void (%"typ.SYSTEM.TObject"*, i8*)*, i8 (%"typ.SYSTEM.TObject"*, %"typ.SYSTEM.TObject"*)*, i64 (%"typ.SYSTEM.TObject"*)*, void (%"typ.SYSTEM.TObject"*, i8**)*, i8* }>
%"typ.SYSUTILS.EExternal" = type <{ %"typ.SYSUTILS.Exception" }>
%"typ.SYSTEM.tinterfaceentry" = type <{ %"typ.SYSTEM.TGuid"**, i8*, i64, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8 }>
%"typ.SYSTEM.TMsgStrTable" = type <{ [256 x
i8]*, i8* }>
%"typ.SYSTEM.TGuid" = type <{ i32, i16, i16, [8 x
i8] }>
; End asmlist al_begin
; Begin asmlist al_procedures
define void @"\01_P$PROGRAM_$$_ASSIGNQWORD$LONGWORD$LONGWORD$QWORD"(i32 %p.h, i32 %p.l, i64* %p.q) nobuiltin
{
; [16] procedure assignqword(h,l : dword;var q : qword);
%tmp.1 = alloca i32, align 8
%tmp.2 = alloca i32, align 8
%tmp.3 = alloca i64*, align 8
; Var h located at %tmp.1
; Var l located at %tmp.2
; Var q located at %tmp.3
; [18] begin
store i32 %p.h, i32* %tmp.1, align 8
store i32 %p.l, i32* %tmp.2, align 8
store i64* %p.q, i64** %tmp.3, align 8
; [19] tqwordrec(q).high:=h;
%reg.1_16 = load i64*, i64** %tmp.3, align 8
%reg.1_17 = bitcast i64* %reg.1_16 to %"typ.PROGRAM.tqwordrec"*
%reg.1_18 = getelementptr %"typ.PROGRAM.tqwordrec", %"typ.PROGRAM.tqwordrec"* %reg.1_17, i32 0, i32 1
%reg.1_19 = load i32, i32* %tmp.1, align 8
store i32 %reg.1_19, i32* %reg.1_18, align 4
; [20] tqwordrec(q).low:=l;
%reg.1_20 = load i64*, i64** %tmp.3, align 8
%reg.1_21 = bitcast i64* %reg.1_20 to %"typ.PROGRAM.tqwordrec"*
%reg.1_22 = getelementptr %"typ.PROGRAM.tqwordrec", %"typ.PROGRAM.tqwordrec"* %reg.1_21, i32 0, i32 0
%reg.1_23 = load i32, i32* %tmp.2, align 8
store i32 %reg.1_23, i32* %reg.1_22, align 8
; [21] end;
br label %Lj5
Lj5:
ret void
}
define void @"\01_P$PROGRAM_$$_TESTMULQWORD"() nobuiltin personality
i8* bitcast ( i64 (i32, i32, i64, i8*, i8*)* @"\01_SYSTEM_$$__FPC_EXCEPTION_PERSONALITY_DO_NOTHING_V0$crcCBEBE3B3" to i8*) {
; Temps allocated between rbp+6 and rbp+21
; [23] procedure testmulqword;
%tmp.1 = alloca i64, align 8
%tmp.2 = alloca i64, align 8
%tmp.3 = alloca i64, align 8
%tmp.4 = alloca i64, align 8
%tmp.5 = alloca i32, align 4
%tmp.6 = alloca i32, align 4
%tmp.7 = alloca %"typ.SYSTEM.TExceptAddr", align 8
%tmp.8 = alloca %"typ.SYSTEM.jmp_buf", align 8
%tmp.9 = alloca i64, align 8
%tmp.10 = alloca i8*, align 8
%tmp.11 = alloca %"typ.SYSTEM.TextRec"*, align 8
%tmp.12 = alloca i8*, align 8
%tmp.13 = alloca %"typ.SYSTEM.TextRec"*, align 8
%tmp.14 = alloca i8*, align 8
%tmp.15 = alloca %"typ.SYSTEM.TextRec"*, align 8
%tmp.16 = alloca %"typ.SYSUTILS.EIntOverflow"*, align 8
%tmp.17 = alloca %"typ.SYSTEM.TExceptAddr", align 8
%tmp.18 = alloca %"typ.SYSTEM.jmp_buf", align 8
%tmp.19 = alloca i64, align 8
%tmp.20 = alloca i8*, align 8
%tmp.21 = alloca %"typ.SYSTEM.TextRec"*, align 8
; Var q1 located at %tmp.1
; Var q2 located at %tmp.2
; Var q3 located at %tmp.3
; Var q4 located at %tmp.4
; Var c located at %tmp.5
; Var loops located at %tmp.6
; [28] begin
; [29] assignqword(0,$1000,q1);
%reg.1_16 = bitcast i64* %tmp.1 to i64*
call void (i32, i32, i64*) @"\01_P$PROGRAM_$$_ASSIGNQWORD$LONGWORD$LONGWORD$QWORD" (i32 0, i32 4096, i64* %reg.1_16)
; [30] assignqword(0,$7fff,q2);
%reg.1_19 = bitcast i64* %tmp.2 to i64*
call void (i32, i32, i64*) @"\01_P$PROGRAM_$$_ASSIGNQWORD$LONGWORD$LONGWORD$QWORD" (i32 0, i32 32767, i64* %reg.1_19)
; [31] c := $1000 * $7fff;
store i32 134213632, i32* %tmp.5, align 4
; [32] q4 := c;
%reg.1_23 = load i32, i32* %tmp.5, align 4
%reg.1_22 = zext i32 %reg.1_23 to i64
store i64 %reg.1_22, i64* %tmp.4, align 8
; [33] loops := 0;
store i32 0, i32* %tmp.6, align 4
; [34] try
%reg.1_26 = bitcast %"typ.SYSTEM.TExceptAddr"* %tmp.7 to i8*
%reg.1_25 = bitcast %"typ.SYSTEM.jmp_buf"* %tmp.8 to i8*
%reg.1_27 = call %"typ.SYSTEM.jmp_buf"* (i32, i8*, i8*) @"\01fpc_pushexceptaddr" (i32 1, i8* %reg.1_25, i8* %reg.1_26)
%reg.1_28 = bitcast %"typ.SYSTEM.jmp_buf"* %reg.1_27 to %"typ.SYSTEM.jmp_buf"*
%reg.1_29 = bitcast %"typ.SYSTEM.jmp_buf"* %reg.1_28 to %"typ.SYSTEM.jmp_buf"*
%reg.1_30 = call i32 (%"typ.SYSTEM.jmp_buf"*) @"\01fpc_setjmp" (%"typ.SYSTEM.jmp_buf"* %reg.1_29)
%reg.1_31 = bitcast i32 %reg.1_30 to i32
%reg.1_32 = zext i32 %reg.1_31 to i64
store i64 %reg.1_32, i64* %tmp.9, align 8
%reg.1_33 = trunc i64 0 to i32
%reg.1_34 = icmp ne
i32 %reg.1_31, %reg.1_33
br i1 %reg.1_34, label %Lj13, label %Lj14
Lj14:
; [35] repeat
br label %Lj16
Lj16:
; [36] q3 := q1 * q2;
%reg.1_35 = load i64, i64* %tmp.1, align 8
%reg.1_36 = load i64, i64* %tmp.2, align 8
%reg.1_38 = zext i64 %reg.1_35 to i128
%reg.1_39 = zext i64 %reg.1_36 to i128
%reg.1_40 = mul i128 %reg.1_39, %reg.1_38
%reg.1_37 = trunc i128 %reg.1_40 to i64
%reg.1_41 = zext i64 %reg.1_37 to i128
%reg.1_42 = icmp ne
i128 %reg.1_41, %reg.1_40
%reg.1_43 = trunc i64 0 to i1
%reg.1_44 = icmp eq
i1 %reg.1_42, %reg.1_43
br i1 %reg.1_44, label %Lj19, label %Lj20
Lj20:
invoke void () @"\01fpc_overflow" () to label %Lj21 unwind label %Lj15
Lj21:
br label %Lj19
Lj19:
store i64 %reg.1_37, i64* %tmp.3, align 8
; [37] if q3 <> q4 then
%reg.1_45 = load i64, i64* %tmp.3, align 8
%reg.1_46 = load i64, i64* %tmp.4, align 8
%reg.1_47 = icmp ne
i64 %reg.1_45, %reg.1_46
%reg.1_48 = zext i1 %reg.1_47 to i8
%reg.1_49 = trunc i8 %reg.1_48 to i1
br i1 %reg.1_49, label %Lj22, label %Lj24
Lj24:
br label %Lj23
Lj22:
; [39] writeln('qword multiplication of shift error');
%reg.1_50 = invoke %"typ.SYSTEM.TextRec"* () @"\01fpc_get_output" () to label %Lj25 unwind label %Lj15
Lj25:
%reg.1_51 = bitcast %"typ.SYSTEM.TextRec"* %reg.1_50 to %"typ.SYSTEM.TextRec"*
store %"typ.SYSTEM.TextRec"* %reg.1_51, %"typ.SYSTEM.TextRec"** %tmp.11, align 8
%reg.1_52 = bitcast %"typ.SYSTEM.TextRec"** %tmp.11 to i8**
%reg.1_53 = load i8*, i8** %reg.1_52, align 8
store i8* %reg.1_53, i8** %tmp.10, align 8
%reg.1_54 = bitcast [36 x
i8]* bitcast ([37 x
i8]* @"\01_$PROGRAM$_Ld1" to [36 x
i8]*) to [256 x
i8]*
%reg.1_55 = bitcast [256 x
i8]* %reg.1_54 to [256 x
i8]*
%reg.1_56 = load i8*, i8** %tmp.10, align 8
%reg.1_57 = bitcast i8* %reg.1_56 to %"typ.SYSTEM.TextRec"*
%reg.1_58 = bitcast %"typ.SYSTEM.TextRec"* %reg.1_57 to %"typ.SYSTEM.TextRec"*
invoke void (i32, %"typ.SYSTEM.TextRec"*, [256 x
i8]*) @"\01fpc_write_text_shortstr" (i32 0, %"typ.SYSTEM.TextRec"* %reg.1_58, [256 x
i8]* %reg.1_55) to label %Lj26 unwind label %Lj15
Lj26:
invoke void () @"\01fpc_iocheck" () to label %Lj27 unwind label %Lj15
Lj27:
%reg.1_60 = load i8*, i8** %tmp.10, align 8
%reg.1_61 = bitcast i8* %reg.1_60 to %"typ.SYSTEM.TextRec"*
%reg.1_62 = bitcast %"typ.SYSTEM.TextRec"* %reg.1_61 to %"typ.SYSTEM.TextRec"*
invoke void (%"typ.SYSTEM.TextRec"*) @"\01fpc_writeln_end" (%"typ.SYSTEM.TextRec"* %reg.1_62) to label %Lj28 unwind label %Lj15
Lj28:
invoke void () @"\01fpc_iocheck" () to label %Lj29 unwind label %Lj15
Lj29:
; [40] halt(1);
invoke void (i32) @"\01_SYSTEM_$$_HALT$LONGINT" (i32 1) to label %Lj30 unwind label %Lj15
Lj30:
br label %Lj23
Lj23:
; [42] inc(loops);
%reg.1_65 = load i32, i32* %tmp.6, align 4
%reg.1_64 = sext i32 %reg.1_65 to i64
%reg.1_66 = add i64 %reg.1_64, 1
%reg.1_68 = bitcast i64 %reg.1_66 to i64
%reg.1_67 = trunc i64 %reg.1_68 to i32
store i32 %reg.1_67, i32* %tmp.6, align 4
; [43] if (loops >= 39) then
%reg.1_69 = load i32, i32* %tmp.6, align 4
%reg.1_70 = icmp sge
i32 %reg.1_69, 39
%reg.1_71 = zext i1 %reg.1_70 to i8
%reg.1_72 = trunc i8 %reg.1_71 to i1
br i1 %reg.1_72, label %Lj31, label %Lj33
Lj33:
br label %Lj32
Lj31:
; [45] writeln('qword multiplication overflow detection failed');
%reg.1_73 = invoke %"typ.SYSTEM.TextRec"* () @"\01fpc_get_output" () to label %Lj34 unwind label %Lj15
Lj34:
%reg.1_74 = bitcast %"typ.SYSTEM.TextRec"* %reg.1_73 to %"typ.SYSTEM.TextRec"*
store %"typ.SYSTEM.TextRec"* %reg.1_74, %"typ.SYSTEM.TextRec"** %tmp.13, align 8
%reg.1_75 = bitcast %"typ.SYSTEM.TextRec"** %tmp.13 to i8**
%reg.1_76 = load i8*, i8** %reg.1_75, align 8
store i8* %reg.1_76, i8** %tmp.12, align 8
%reg.1_77 = bitcast [47 x
i8]* bitcast ([48 x
i8]* @"\01_$PROGRAM$_Ld2" to [47 x
i8]*) to [256 x
i8]*
%reg.1_78 = bitcast [256 x
i8]* %reg.1_77 to [256 x
i8]*
%reg.1_79 = load i8*, i8** %tmp.12, align 8
%reg.1_80 = bitcast i8* %reg.1_79 to %"typ.SYSTEM.TextRec"*
%reg.1_81 = bitcast %"typ.SYSTEM.TextRec"* %reg.1_80 to %"typ.SYSTEM.TextRec"*
invoke void (i32, %"typ.SYSTEM.TextRec"*, [256 x
i8]*) @"\01fpc_write_text_shortstr" (i32 0, %"typ.SYSTEM.TextRec"* %reg.1_81, [256 x
i8]* %reg.1_78) to label %Lj35 unwind label %Lj15
Lj35:
invoke void () @"\01fpc_iocheck" () to label %Lj36 unwind label %Lj15
Lj36:
%reg.1_83 = load i8*, i8** %tmp.12, align 8
%reg.1_84 = bitcast i8* %reg.1_83 to %"typ.SYSTEM.TextRec"*
%reg.1_85 = bitcast %"typ.SYSTEM.TextRec"* %reg.1_84 to %"typ.SYSTEM.TextRec"*
invoke void (%"typ.SYSTEM.TextRec"*) @"\01fpc_writeln_end" (%"typ.SYSTEM.TextRec"* %reg.1_85) to label %Lj37 unwind label %Lj15
Lj37:
invoke void () @"\01fpc_iocheck" () to label %Lj38 unwind label %Lj15
Lj38:
; [46] halt(1);
invoke void (i32) @"\01_SYSTEM_$$_HALT$LONGINT" (i32 1) to label %Lj39 unwind label %Lj15
Lj39:
br label %Lj32
Lj32:
; [48] q1 := q1 shl 1;
%reg.1_87 = load i64, i64* %tmp.1, align 8
%reg.1_88 = shl i64 %reg.1_87, 1
store i64 %reg.1_88, i64* %tmp.1, align 8
; [49] q4 := q4 shl 1;
%reg.1_89 = load i64, i64* %tmp.4, align 8
%reg.1_90 = shl i64 %reg.1_89, 1
store i64 %reg.1_90, i64* %tmp.4, align 8
; [50] writeln(loops,': ',q3);
%reg.1_91 = invoke %"typ.SYSTEM.TextRec"* () @"\01fpc_get_output" () to label %Lj40 unwind label %Lj15
Lj40:
%reg.1_92 = bitcast %"typ.SYSTEM.TextRec"* %reg.1_91 to %"typ.SYSTEM.TextRec"*
store %"typ.SYSTEM.TextRec"* %reg.1_92, %"typ.SYSTEM.TextRec"** %tmp.15, align 8
%reg.1_93 = bitcast %"typ.SYSTEM.TextRec"** %tmp.15 to i8**
%reg.1_94 = load i8*, i8** %reg.1_93, align 8
store i8* %reg.1_94, i8** %tmp.14, align 8
%reg.1_96 = load i32, i32* %tmp.6, align 4
%reg.1_95 = sext i32 %reg.1_96 to i64
%reg.1_97 = bitcast i64 %reg.1_95 to i64
%reg.1_98 = load i8*, i8** %tmp.14, align 8
%reg.1_99 = bitcast i8* %reg.1_98 to %"typ.SYSTEM.TextRec"*
%reg.1_100 = bitcast %"typ.SYSTEM.TextRec"* %reg.1_99 to %"typ.SYSTEM.TextRec"*
invoke void (i32, %"typ.SYSTEM.TextRec"*, i64) @"\01fpc_write_text_sint" (i32 0, %"typ.SYSTEM.TextRec"* %reg.1_100, i64 %reg.1_97) to label %Lj41 unwind label %Lj15
Lj41:
invoke void () @"\01fpc_iocheck" () to label %Lj42 unwind label %Lj15
Lj42:
%reg.1_102 = bitcast [3 x
i8]* bitcast ([4 x
i8]* @"\01_$PROGRAM$_Ld3" to [3 x
i8]*) to [256 x
i8]*
%reg.1_103 = bitcast [256 x
i8]* %reg.1_102 to [256 x
i8]*
%reg.1_104 = load i8*, i8** %tmp.14, align 8
%reg.1_105 = bitcast i8* %reg.1_104 to %"typ.SYSTEM.TextRec"*
%reg.1_106 = bitcast %"typ.SYSTEM.TextRec"* %reg.1_105 to %"typ.SYSTEM.TextRec"*
invoke void (i32, %"typ.SYSTEM.TextRec"*, [256 x
i8]*) @"\01fpc_write_text_shortstr" (i32 0, %"typ.SYSTEM.TextRec"* %reg.1_106, [256 x
i8]* %reg.1_103) to label %Lj43 unwind label %Lj15
Lj43:
invoke void () @"\01fpc_iocheck" () to label %Lj44 unwind label %Lj15
Lj44:
%reg.1_108 = load i64, i64* %tmp.3, align 8
%reg.1_109 = load i8*, i8** %tmp.14, align 8
%reg.1_110 = bitcast i8* %reg.1_109 to %"typ.SYSTEM.TextRec"*
%reg.1_111 = bitcast %"typ.SYSTEM.TextRec"* %reg.1_110 to %"typ.SYSTEM.TextRec"*
invoke void (i32, %"typ.SYSTEM.TextRec"*, i64) @"\01fpc_write_text_uint" (i32 0, %"typ.SYSTEM.TextRec"* %reg.1_111, i64 %reg.1_108) to label %Lj45 unwind label %Lj15
Lj45:
invoke void () @"\01fpc_iocheck" () to label %Lj46 unwind label %Lj15
Lj46:
%reg.1_113 = load i8*, i8** %tmp.14, align 8
%reg.1_114 = bitcast i8* %reg.1_113 to %"typ.SYSTEM.TextRec"*
%reg.1_115 = bitcast %"typ.SYSTEM.TextRec"* %reg.1_114 to %"typ.SYSTEM.TextRec"*
invoke void (%"typ.SYSTEM.TextRec"*) @"\01fpc_writeln_end" (%"typ.SYSTEM.TextRec"* %reg.1_115) to label %Lj47 unwind label %Lj15
Lj47:
invoke void () @"\01fpc_iocheck" () to label %Lj48 unwind label %Lj15
Lj48:
br label %Lj17
Lj17:
; [51] until false;
br label %Lj16
br label %Lj13
Lj15:
%reg.1_116 = landingpad
%"typ.PROGRAM.$llvmstruct$d00000004i32" catch
i8* null
br label %Lj13
Lj13:
call void () @"\01fpc_popaddrstack" ()
%reg.1_117 = load i64, i64* %tmp.9, align 8
%reg.1_118 = bitcast i64 0 to i64
%reg.1_119 = icmp eq
i64 %reg.1_117, %reg.1_118
br i1 %reg.1_119, label %Lj11, label %Lj49
Lj49:
; [60] end;
%reg.1_120 = bitcast %"typ.SYSUTILS.$vmtdef$EINTOVERFLOW"* @"\01_VMT_$SYSUTILS_$$_EINTOVERFLOW" to %"typ.SYSTEM.$vmtdef$TOBJECT"*
%reg.1_121 = call %"typ.SYSTEM.TObject"* (%"typ.SYSTEM.$vmtdef$TOBJECT"*) @"\01fpc_catches" (%"typ.SYSTEM.$vmtdef$TOBJECT"* %reg.1_120)
%reg.1_122 = bitcast %"typ.SYSTEM.TObject"* %reg.1_121 to %"typ.SYSTEM.TObject"*
%reg.1_123 = inttoptr i64 0 to %"typ.SYSTEM.TObject"*
%reg.1_124 = icmp eq %"typ.SYSTEM.TObject"* %reg.1_122, %reg.1_123
br i1 %reg.1_124, label %Lj50, label %Lj51
Lj51:
%reg.1_125 = bitcast %"typ.SYSTEM.TObject"* %reg.1_122 to %"typ.SYSUTILS.EIntOverflow"*
store %"typ.SYSUTILS.EIntOverflow"* %reg.1_125, %"typ.SYSUTILS.EIntOverflow"** %tmp.16, align 8
%reg.1_128 = bitcast %"typ.SYSTEM.TExceptAddr"* %tmp.17 to i8*
%reg.1_127 = bitcast %"typ.SYSTEM.jmp_buf"* %tmp.18 to i8*
%reg.1_129 = call %"typ.SYSTEM.jmp_buf"* (i32, i8*, i8*) @"\01fpc_pushexceptaddr" (i32 1, i8* %reg.1_127, i8* %reg.1_128)
%reg.1_130 = bitcast %"typ.SYSTEM.jmp_buf"* %reg.1_129 to %"typ.SYSTEM.jmp_buf"*
%reg.1_131 = bitcast %"typ.SYSTEM.jmp_buf"* %reg.1_130 to %"typ.SYSTEM.jmp_buf"*
%reg.1_132 = call i32 (%"typ.SYSTEM.jmp_buf"*) @"\01fpc_setjmp" (%"typ.SYSTEM.jmp_buf"* %reg.1_131)
%reg.1_133 = bitcast i32 %reg.1_132 to i32
%reg.1_134 = zext i32 %reg.1_133 to i64
store i64 %reg.1_134, i64* %tmp.19, align 8
%reg.1_135 = trunc i64 0 to i32
%reg.1_136 = icmp ne
i32 %reg.1_133, %reg.1_135
br i1 %reg.1_136, label %Lj52, label %Lj53
Lj53:
; [55] if loops < 38 then
%reg.1_137 = load i32, i32* %tmp.6, align 4
%reg.1_138 = icmp slt
i32 %reg.1_137, 38
%reg.1_139 = zext i1 %reg.1_138 to i8
%reg.1_140 = trunc i8 %reg.1_139 to i1
br i1 %reg.1_140, label %Lj56, label %Lj58
Lj58:
br label %Lj57
Lj56:
; [57] writeln('false qword multiplication overflow detected');
%reg.1_141 = invoke %"typ.SYSTEM.TextRec"* () @"\01fpc_get_output" () to label %Lj59 unwind label %Lj54
Lj59:
%reg.1_142 = bitcast %"typ.SYSTEM.TextRec"* %reg.1_141 to %"typ.SYSTEM.TextRec"*
store %"typ.SYSTEM.TextRec"* %reg.1_142, %"typ.SYSTEM.TextRec"** %tmp.21, align 8
%reg.1_143 = bitcast %"typ.SYSTEM.TextRec"** %tmp.21 to i8**
%reg.1_144 = load i8*, i8** %reg.1_143, align 8
store i8* %reg.1_144, i8** %tmp.20, align 8
%reg.1_145 = bitcast [45 x
i8]* bitcast ([46 x
i8]* @"\01_$PROGRAM$_Ld4" to [45 x
i8]*) to [256 x
i8]*
%reg.1_146 = bitcast [256 x
i8]* %reg.1_145 to [256 x
i8]*
%reg.1_147 = load i8*, i8** %tmp.20, align 8
%reg.1_148 = bitcast i8* %reg.1_147 to %"typ.SYSTEM.TextRec"*
%reg.1_149 = bitcast %"typ.SYSTEM.TextRec"* %reg.1_148 to %"typ.SYSTEM.TextRec"*
invoke void (i32, %"typ.SYSTEM.TextRec"*, [256 x
i8]*) @"\01fpc_write_text_shortstr" (i32 0, %"typ.SYSTEM.TextRec"* %reg.1_149, [256 x
i8]* %reg.1_146) to label %Lj60 unwind label %Lj54
Lj60:
invoke void () @"\01fpc_iocheck" () to label %Lj61 unwind label %Lj54
Lj61:
%reg.1_151 = load i8*, i8** %tmp.20, align 8
%reg.1_152 = bitcast i8* %reg.1_151 to %"typ.SYSTEM.TextRec"*
%reg.1_153 = bitcast %"typ.SYSTEM.TextRec"* %reg.1_152 to %"typ.SYSTEM.TextRec"*
invoke void (%"typ.SYSTEM.TextRec"*) @"\01fpc_writeln_end" (%"typ.SYSTEM.TextRec"* %reg.1_153) to label %Lj62 unwind label %Lj54
Lj62:
invoke void () @"\01fpc_iocheck" () to label %Lj63 unwind label %Lj54
Lj63:
; [58] halt(1);
invoke void (i32) @"\01_SYSTEM_$$_HALT$LONGINT" (i32 1) to label %Lj64 unwind label %Lj54
Lj64:
br label %Lj57
Lj57:
br label %Lj52
Lj54:
%reg.1_155 = landingpad
%"typ.PROGRAM.$llvmstruct$d00000004i32" catch
i8* null
br label %Lj52
Lj52:
call void () @"\01fpc_popaddrstack" ()
%reg.1_156 = load i64, i64* %tmp.19, align 8
%reg.1_157 = bitcast i64 0 to i64
%reg.1_158 = icmp eq
i64 %reg.1_156, %reg.1_157
br i1 %reg.1_158, label %Lj65, label %Lj66
Lj66:
call void () @"\01fpc_raise_nested" ()
br label %Lj65
Lj65:
call void () @"\01fpc_doneexception" ()
br label %Lj11
Lj50:
br label %Lj12
Lj12:
call void () @"\01fpc_reraise" ()
br label %Lj11
Lj11:
; [62] end;
br label %Lj7
Lj7:
ret void
}
define void @"\01_main"(i32 %p.ARGC, i8** %p.ARGV, i8** %p.ARGP) nobuiltin
{
; [7] type
%tmp.1 = alloca i32, align 8
%tmp.2 = alloca i8**, align 8
%tmp.3 = alloca i8**, align 8
; Var ARGC located at %tmp.1
; Var ARGV located at %tmp.2
; Var ARGP located at %tmp.3
%reg.1_16 = bitcast i32 %p.ARGC to i32
store i32 %reg.1_16, i32* %tmp.1, align 8
store i8** %p.ARGV, i8*** %tmp.2, align 8
store i8** %p.ARGP, i8*** %tmp.3, align 8
%reg.1_17 = load i8**, i8*** %tmp.3, align 8
%reg.1_18 = load i8**, i8*** %tmp.2, align 8
%reg.1_20 = bitcast i32* %tmp.1 to i32*
%reg.1_19 = load i32, i32* %reg.1_20, align 8
call void (i32, i8**, i8**) @"\01_FPC_SYSTEMMAIN" (i32 %reg.1_19, i8** %reg.1_18, i8** %reg.1_17)
br label %Lj67
Lj67:
ret void
}
define void @"\01_PASCALMAIN"() nobuiltin noreturn {
; [tint643.pp]
call void () @"\01fpc_initializeunits" ()
; [65] testmulqword;
call void () @"\01_P$PROGRAM_$$_TESTMULQWORD" ()
; [66] end.
br label %Lj3
Lj3:
call void () @"\01fpc_do_exit" ()
ret void
}
declare i64 @"\01_SYSTEM_$$__FPC_EXCEPTION_PERSONALITY_DO_NOTHING_V0$crcCBEBE3B3"(i32, i32, i64, i8*, i8*) nobuiltin
declare %"typ.SYSTEM.jmp_buf"* @"\01fpc_pushexceptaddr"(i32, i8*, i8*) nobuiltin
declare i32 @"\01fpc_setjmp"(%"typ.SYSTEM.jmp_buf"*) returns_twice nobuiltin
declare void @"\01fpc_overflow"() nobuiltin
declare %"typ.SYSTEM.TextRec"* @"\01fpc_get_output"() nobuiltin
declare void @"\01fpc_write_text_shortstr"(i32, %"typ.SYSTEM.TextRec"*, [256 x
i8]*) nobuiltin
declare void @"\01fpc_iocheck"() nobuiltin
declare void @"\01fpc_writeln_end"(%"typ.SYSTEM.TextRec"*) nobuiltin
declare void @"\01_SYSTEM_$$_HALT$LONGINT"(i32) nobuiltin
declare void @"\01fpc_write_text_sint"(i32, %"typ.SYSTEM.TextRec"*, i64) nobuiltin
declare void @"\01fpc_write_text_uint"(i32, %"typ.SYSTEM.TextRec"*, i64) nobuiltin
declare void @"\01fpc_popaddrstack"() nobuiltin
@"\01_VMT_$SYSUTILS_$$_EINTOVERFLOW" = external global %"typ.SYSUTILS.$vmtdef$EINTOVERFLOW", align 8
declare %"typ.SYSTEM.TObject"* @"\01fpc_catches"(%"typ.SYSTEM.$vmtdef$TOBJECT"*) nobuiltin
declare void @"\01fpc_raise_nested"() nobuiltin
declare void @"\01fpc_doneexception"() nobuiltin
declare void @"\01fpc_reraise"() nobuiltin
declare void @"\01_FPC_SYSTEMMAIN"(i32, i8**, i8**) nobuiltin
declare void @"\01fpc_initializeunits"() nobuiltin
declare void @"\01fpc_do_exit"() nobuiltin
; End asmlist al_procedures
; Begin asmlist al_globals
@"\01INITFINAL" = global <{ i64, i64, i8*, i8*, i8*, i8*, i8*, i8*, void ()*, void ()*, i8*, i8* }> <{i64 5, i64 zeroinitializer, i8* bitcast (i8** @"\01_INIT$_$SYSTEM" to i8*), i8* zeroinitializer, i8* zeroinitializer, i8* bitcast (i8** @"\01_FINALIZE$_$OBJPAS" to i8*), i8* bitcast (i8** @"\01_INIT$_$UNIX" to i8*), i8* bitcast (i8** @"\01_FINALIZE$_$UNIX" to i8*), void ()* bitcast ( void ()** @"\01_SYSUTILS$_$TENCODING_$__$$_create" to void ()*), void ()* bitcast ( void ()** @"\01_SYSUTILS$_$TENCODING_$__$$_destroy" to void ()*), i8* bitcast (i8** @"\01_INIT$_$SYSUTILS" to i8*), i8* bitcast (i8** @"\01_FINALIZE$_$SYSUTILS" to i8*)}>, align 8
@"\01FPC_THREADVARTABLES" = global <{ i32, i8* }> <{i32 1, i8* bitcast (i8** @"\01_THREADVARLIST_$SYSTEM$indirect" to i8*)}>, align 8
@"\01FPC_RESOURCESTRINGTABLES" = constant <{ i64, i8*, i8* }> <{i64 1, i8* bitcast (i8** @"\01_RESSTR_$SYSCONST_$$_START$indirect" to i8*), i8* bitcast (i8** @"\01_RESSTR_$SYSCONST_$$_END$indirect" to i8*)}>, align 8
@"\01FPC_WIDEINITTABLES" = global <{ i64 }> <{i64 zeroinitializer}>, align 8
@"\01FPC_RESSTRINITTABLES" = global <{ i64 }> <{i64 zeroinitializer}>, align 8
@"\01__fpc_ident" = internal global [42 x
i8] c
"FPC 3.1.1 [2016/12/18] for x86_64 - Darwin", align 8
@"\01__stklen" = global i64 262144, align 8
@"\01__heapsize" = global i64 zeroinitializer, align 8
@"\01__fpc_valgrind" = global i8 zeroinitializer, align 8
@"\01FPC_RESLOCATION" = constant i8* zeroinitializer, align 8
@llvm.used = appending global [1 x
i8*] [i8* bitcast ([42 x
i8]* @"\01__fpc_ident" to i8*)], section "llvm.metadata"
@"\01_INIT$_$SYSTEM" = external
global i8*, align 8
@"\01_FINALIZE$_$OBJPAS" = external
global i8*, align 8
@"\01_INIT$_$UNIX" = external
global i8*, align 8
@"\01_FINALIZE$_$UNIX" = external
global i8*, align 8
@"\01_SYSUTILS$_$TENCODING_$__$$_create" = external global void ()*, align 8
@"\01_SYSUTILS$_$TENCODING_$__$$_destroy" = external global void ()*, align 8
@"\01_INIT$_$SYSUTILS" = external
global i8*, align 8
@"\01_FINALIZE$_$SYSUTILS" = external
global i8*, align 8
@"\01_THREADVARLIST_$SYSTEM$indirect" = external
global i8*, align 8
@"\01_RESSTR_$SYSCONST_$$_START$indirect" = external
global i8*, align 8
@"\01_RESSTR_$SYSCONST_$$_END$indirect" = external
global i8*, align 8
; End asmlist al_globals
; Begin asmlist al_typedconsts
@"\01_$PROGRAM$_Ld1" = unnamed_addr
constant [37 x
i8] c
"#qword multiplication of shift error\00", align 8
@"\01_$PROGRAM$_Ld2" = unnamed_addr
constant [48 x
i8] c
".qword multiplication overflow detection failed\00", align 8
@"\01_$PROGRAM$_Ld3" = unnamed_addr
constant [4 x
i8] c
"\02: \00", align 8
@"\01_$PROGRAM$_Ld4" = unnamed_addr
constant [46 x
i8] c
",false qword multiplication overflow detected\00", align 8
; End asmlist al_typedconsts