Skip to content

Instantly share code, notes, and snippets.

@vchuravy
Last active January 20, 2021 03:10
Show Gist options
  • Save vchuravy/a0170b4d42e46d800aae53b3a80bb582 to your computer and use it in GitHub Desktop.
Save vchuravy/a0170b4d42e46d800aae53b3a80bb582 to your computer and use it in GitHub Desktop.
Conversion from BigInt to Float16 on PowerPC
; ModuleID = 'Float16'
source_filename = "Float16"
target datalayout = "e-m:e-i64:64-n32:64"
target triple = "powerpc64le-unknown-linux-gnu"
; @ gmp.jl:436 within `Float16'
define half @julia_Float16_50({} addrspace(10)* nonnull align 8 dereferenceable(16) %0) !dbg !5 {
top:
; @ gmp.jl:437 within `Float16'
; ┌ @ gmp.jl:648 within `=='
; │┌ @ gmp.jl:569 within `cmp'
; ││┌ @ gmp.jl:229 within `cmp_si'
%1 = bitcast {} addrspace(10)* %0 to i8 addrspace(10)*, !dbg !7
%2 = addrspacecast i8 addrspace(10)* %1 to i8*, !dbg !7
%3 = call i32 inttoptr (i64 140735311818192 to i32 (i8*, i64)*)(i8* nonnull %2, i64 0), !dbg !7
; │└└
; │ @ gmp.jl:648 within `==' @ promotion.jl:409
%.not = icmp eq i32 %3, 0, !dbg !14
; └
br i1 %.not, label %L11, label %L12, !dbg !13
L11: ; preds = %top
ret half 0xH0000, !dbg !13
L12: ; preds = %top
; @ gmp.jl:438 within `Float16'
; ┌ @ Base.jl:33 within `getproperty'
%4 = addrspacecast i8 addrspace(10)* %1 to i8 addrspace(11)*, !dbg !17
%5 = getelementptr inbounds i8, i8 addrspace(11)* %4, i64 8, !dbg !17
%6 = bitcast i8 addrspace(11)* %5 to i64* addrspace(11)*, !dbg !17
%7 = load i64*, i64* addrspace(11)* %6, align 8, !dbg !17, !tbaa !21
; └
; ┌ @ pointer.jl:105 within `unsafe_load' @ pointer.jl:105
%8 = load i64, i64* %7, align 1, !dbg !27, !tbaa !31
; └
; @ gmp.jl:439 within `Float16'
; ┌ @ int.jl:387 within `leading_zeros'
%9 = call i64 @llvm.ctlz.i64(i64 %8, i1 false), !dbg !32, !range !36
; └
; @ gmp.jl:440 within `Float16'
; ┌ @ operators.jl:362 within `>'
; │┌ @ int.jl:83 within `<'
%10 = icmp ugt i64 %8, 65535, !dbg !37
; └└
br i1 %10, label %L12.L78_crit_edge, label %L25, !dbg !42
L12.L78_crit_edge: ; preds = %L12
br label %L78, !dbg !42
L25: ; preds = %L12
; ┌ @ Base.jl:33 within `getproperty'
%11 = getelementptr inbounds i8, i8 addrspace(11)* %4, i64 4, !dbg !43
%12 = bitcast i8 addrspace(11)* %11 to i32 addrspace(11)*, !dbg !43
%13 = load i32, i32 addrspace(11)* %12, align 4, !dbg !43, !tbaa !21
; └
; ┌ @ int.jl:172 within `abs'
; │┌ @ int.jl:132 within `flipsign'
%14 = icmp slt i32 %13, 0, !dbg !44
%15 = sub i32 0, %13, !dbg !44
%16 = select i1 %14, i32 %15, i32 %13, !dbg !44
; └└
; ┌ @ operators.jl:362 within `>'
; │┌ @ promotion.jl:360 within `<' @ int.jl:83
%17 = icmp sgt i32 %16, 1, !dbg !48
; └└
br i1 %17, label %L78, label %L29, !dbg !42
L29: ; preds = %L25
; @ gmp.jl:444 within `Float16'
; ┌ @ int.jl:86 within `-'
%18 = sub nsw i64 52, %9, !dbg !51
; └
; ┌ @ int.jl:464 within `>>'
; │┌ @ int.jl:85 within `-'
%19 = sub nsw i64 0, %18, !dbg !54
; └└
; @ gmp.jl:446 within `Float16'
; ┌ @ gmp.jl:554 within `trailing_zeros'
; │┌ @ gmp.jl:181 within `scan1'
%20 = call i64 inttoptr (i64 140735311880240 to i64 (i8*, i64)*)(i8* nonnull %2, i64 0), !dbg !57
; ││┌ @ boot.jl:755 within `Int64'
; │││┌ @ boot.jl:680 within `toInt64'
; ││││┌ @ boot.jl:619 within `check_top_bit'
; │││││┌ @ boot.jl:609 within `is_top_bit_set'
%21 = icmp sgt i64 %20, -1, !dbg !62
; │││││└
br i1 %21, label %L61, label %L53, !dbg !65
L53: ; preds = %L29
%22 = call nonnull {} addrspace(10)* @j_throw_inexacterror_52({} addrspace(10)* addrspacecast ({}* inttoptr (i64 140735329948576 to {}*) to {} addrspace(10)*), i64 zeroext %20), !dbg !65
call void @llvm.trap(), !dbg !65
unreachable, !dbg !65
L61: ; preds = %L29
; └└└└└
; @ gmp.jl:444 within `Float16'
; ┌ @ int.jl:464 within `>>'
; │┌ @ int.jl:444 within `<='
%23 = icmp ult i64 %8, 2048, !dbg !71
; │└
; │┌ @ int.jl:459 within `<<'
%24 = icmp ugt i64 %19, 63, !dbg !73
%25 = shl i64 %8, %19, !dbg !73
%26 = select i1 %24, i64 0, i64 %25, !dbg !73
; │└
; │ @ int.jl:464 within `>>' @ int.jl:458
%27 = icmp ugt i64 %18, 63, !dbg !75
%28 = lshr i64 %8, %18, !dbg !75
%29 = select i1 %27, i64 0, i64 %28, !dbg !75
; │ @ int.jl:464 within `>>'
%30 = select i1 %23, i64 %26, i64 %29, !dbg !55
; └
; ┌ @ int.jl:474 within `rem'
%31 = trunc i64 %30 to i16, !dbg !76
; └
; @ gmp.jl:445 within `Float16'
; ┌ @ int.jl:87 within `+'
%32 = add i16 %31, 1, !dbg !78
; └
; ┌ @ int.jl:464 within `>>' @ int.jl:458
%33 = lshr i16 %32, 1, !dbg !81
; └
; @ gmp.jl:446 within `Float16'
; ┌ @ promotion.jl:409 within `=='
%34 = icmp eq i64 %20, %18, !dbg !83
; └
; ┌ @ boot.jl:758 within `UInt16'
; │┌ @ boot.jl:715 within `toUInt16'
%35 = zext i1 %34 to i16, !dbg !84
; └└
; ┌ @ int.jl:287 within `~'
%36 = xor i16 %35, -1, !dbg !88
; └
; ┌ @ int.jl:311 within `&'
%37 = and i16 %33, %36, !dbg !90
; └
; @ gmp.jl:447 within `Float16'
; ┌ @ int.jl:474 within `rem'
%38 = trunc i64 %9 to i16, !dbg !92
; └
; ┌ @ int.jl:466 within `<<' @ int.jl:459
%39 = shl i16 %38, 10, !dbg !94
%40 = sub i16 13312, %39, !dbg !94
; └
; @ gmp.jl:448 within `Float16'
; ┌ @ int.jl:87 within `+'
%41 = add i16 %40, %37, !dbg !96
; └
; ┌ @ essentials.jl:424 within `reinterpret'
%42 = bitcast i16 %41 to half, !dbg !98
br label %L78, !dbg !98
L78: ; preds = %L12.L78_crit_edge, %L25, %L61
%value_phi1 = phi half [ %42, %L61 ], [ 0xH7C00, %L25 ], [ 0xH7C00, %L12.L78_crit_edge ]
; └
; @ gmp.jl:450 within `Float16'
; ┌ @ Base.jl:33 within `getproperty'
%43 = getelementptr inbounds i8, i8 addrspace(11)* %4, i64 4, !dbg !101
%44 = bitcast i8 addrspace(11)* %43 to i32 addrspace(11)*, !dbg !101
%45 = load i32, i32 addrspace(11)* %44, align 4, !dbg !101, !tbaa !21
; └
; ┌ @ number.jl:167 within `flipsign'
; │┌ @ int.jl:129 within `signbit'
; ││┌ @ promotion.jl:360 within `<' @ int.jl:83
%46 = icmp sgt i32 %45, -1, !dbg !103
; │└└
; │┌ @ float.jl:346 within `-'
%47 = fpext half %value_phi1 to float, !dbg !110
%48 = fneg float %47, !dbg !110
%49 = fptrunc float %48 to half, !dbg !110
; │└
%50 = select i1 %46, half %value_phi1, half %49, !dbg !107
; └
ret half %50, !dbg !102
}
define nonnull {} addrspace(10)* @jfptr_Float16_51({} addrspace(10)* %0, {} addrspace(10)** %1, i32 %2) #0 {
top:
%3 = call {}*** inttoptr (i64 268438016 to {}*** ()*)() #2
%4 = load {} addrspace(10)*, {} addrspace(10)** %1, align 8, !nonnull !4, !dereferenceable !113, !align !114
%5 = call half @julia_Float16_50({} addrspace(10)* %4)
%6 = bitcast {}*** %3 to i8*
%7 = call noalias nonnull {} addrspace(10)* @jl_gc_pool_alloc(i8* %6, i32 1400, i32 16) #1
%8 = bitcast {} addrspace(10)* %7 to i64 addrspace(10)*
%9 = getelementptr inbounds i64, i64 addrspace(10)* %8, i64 -1
store atomic i64 140735411962768, i64 addrspace(10)* %9 unordered, align 8, !tbaa !115
%10 = bitcast {} addrspace(10)* %7 to half addrspace(10)*
store half %5, half addrspace(10)* %10, align 8, !tbaa !117
ret {} addrspace(10)* %7
}
; Function Attrs: allocsize(1)
declare noalias nonnull {} addrspace(10)* @julia.gc_alloc_obj(i8*, i64, {} addrspace(10)*) #1
; Function Attrs: nounwind readnone
declare nonnull {}* @julia.pointer_from_objref({} addrspace(11)*) #2
; Function Attrs: nounwind readnone speculatable willreturn
declare i64 @llvm.ctlz.i64(i64, i1 immarg) #3
declare nonnull {} addrspace(10)* @j_throw_inexacterror_52({} addrspace(10)*, i64 zeroext)
; Function Attrs: cold noreturn nounwind
declare void @llvm.trap() #4
; Function Attrs: argmemonly nounwind willreturn
declare void @llvm.lifetime.start.p0i8(i64 immarg, i8* nocapture) #5
; Function Attrs: argmemonly nounwind willreturn
declare void @llvm.lifetime.end.p0i8(i64 immarg, i8* nocapture) #5
; Function Attrs: inaccessiblemem_or_argmemonly
declare void @jl_gc_queue_root({} addrspace(10)*) #6
; Function Attrs: allocsize(1)
declare noalias nonnull {} addrspace(10)* @jl_gc_pool_alloc(i8*, i32, i32) #1
; Function Attrs: allocsize(1)
declare noalias nonnull {} addrspace(10)* @jl_gc_big_alloc(i8*, i64) #1
; Function Attrs: allocsize(1)
declare noalias nonnull {} addrspace(10)* @julia.gc_alloc_bytes(i8*, i64) #1
attributes #0 = { "thunk" }
attributes #1 = { allocsize(1) }
attributes #2 = { nounwind readnone }
attributes #3 = { nounwind readnone speculatable willreturn }
attributes #4 = { cold noreturn nounwind }
attributes #5 = { argmemonly nounwind willreturn }
attributes #6 = { inaccessiblemem_or_argmemonly }
!llvm.module.flags = !{!0, !1}
!llvm.dbg.cu = !{!2}
!0 = !{i32 2, !"Dwarf Version", i32 4}
!1 = !{i32 1, !"Debug Info Version", i32 3}
!2 = distinct !DICompileUnit(language: DW_LANG_Julia, file: !3, producer: "julia", isOptimized: true, runtimeVersion: 0, emissionKind: FullDebug, enums: !4, nameTableKind: GNU)
!3 = !DIFile(filename: "gmp.jl", directory: ".")
!4 = !{}
!5 = distinct !DISubprogram(name: "Float16", linkageName: "julia_Float16_50", scope: null, file: !3, line: 436, type: !6, scopeLine: 436, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !2, retainedNodes: !4)
!6 = !DISubroutineType(types: !4)
!7 = !DILocation(line: 229, scope: !8, inlinedAt: !9)
!8 = distinct !DISubprogram(name: "cmp_si;", linkageName: "cmp_si", scope: !3, file: !3, type: !6, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !2, retainedNodes: !4)
!9 = !DILocation(line: 569, scope: !10, inlinedAt: !11)
!10 = distinct !DISubprogram(name: "cmp;", linkageName: "cmp", scope: !3, file: !3, type: !6, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !2, retainedNodes: !4)
!11 = !DILocation(line: 648, scope: !12, inlinedAt: !13)
!12 = distinct !DISubprogram(name: "==;", linkageName: "==", scope: !3, file: !3, type: !6, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !2, retainedNodes: !4)
!13 = !DILocation(line: 437, scope: !5)
!14 = !DILocation(line: 409, scope: !15, inlinedAt: !11)
!15 = distinct !DISubprogram(name: "==;", linkageName: "==", scope: !16, file: !16, type: !6, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !2, retainedNodes: !4)
!16 = !DIFile(filename: "promotion.jl", directory: ".")
!17 = !DILocation(line: 33, scope: !18, inlinedAt: !20)
!18 = distinct !DISubprogram(name: "getproperty;", linkageName: "getproperty", scope: !19, file: !19, type: !6, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !2, retainedNodes: !4)
!19 = !DIFile(filename: "Base.jl", directory: ".")
!20 = !DILocation(line: 438, scope: !5)
!21 = !{!22, !22, i64 0}
!22 = !{!"jtbaa_mutab", !23, i64 0}
!23 = !{!"jtbaa_value", !24, i64 0}
!24 = !{!"jtbaa_data", !25, i64 0}
!25 = !{!"jtbaa", !26, i64 0}
!26 = !{!"jtbaa"}
!27 = !DILocation(line: 105, scope: !28, inlinedAt: !30)
!28 = distinct !DISubprogram(name: "unsafe_load;", linkageName: "unsafe_load", scope: !29, file: !29, type: !6, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !2, retainedNodes: !4)
!29 = !DIFile(filename: "pointer.jl", directory: ".")
!30 = !DILocation(line: 105, scope: !28, inlinedAt: !20)
!31 = !{!24, !24, i64 0}
!32 = !DILocation(line: 387, scope: !33, inlinedAt: !35)
!33 = distinct !DISubprogram(name: "leading_zeros;", linkageName: "leading_zeros", scope: !34, file: !34, type: !6, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !2, retainedNodes: !4)
!34 = !DIFile(filename: "int.jl", directory: ".")
!35 = !DILocation(line: 439, scope: !5)
!36 = !{i64 0, i64 65}
!37 = !DILocation(line: 83, scope: !38, inlinedAt: !39)
!38 = distinct !DISubprogram(name: "<;", linkageName: "<", scope: !34, file: !34, type: !6, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !2, retainedNodes: !4)
!39 = !DILocation(line: 362, scope: !40, inlinedAt: !42)
!40 = distinct !DISubprogram(name: ">;", linkageName: ">", scope: !41, file: !41, type: !6, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !2, retainedNodes: !4)
!41 = !DIFile(filename: "operators.jl", directory: ".")
!42 = !DILocation(line: 440, scope: !5)
!43 = !DILocation(line: 33, scope: !18, inlinedAt: !42)
!44 = !DILocation(line: 132, scope: !45, inlinedAt: !46)
!45 = distinct !DISubprogram(name: "flipsign;", linkageName: "flipsign", scope: !34, file: !34, type: !6, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !2, retainedNodes: !4)
!46 = !DILocation(line: 172, scope: !47, inlinedAt: !42)
!47 = distinct !DISubprogram(name: "abs;", linkageName: "abs", scope: !34, file: !34, type: !6, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !2, retainedNodes: !4)
!48 = !DILocation(line: 83, scope: !38, inlinedAt: !49)
!49 = !DILocation(line: 360, scope: !50, inlinedAt: !39)
!50 = distinct !DISubprogram(name: "<;", linkageName: "<", scope: !16, file: !16, type: !6, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !2, retainedNodes: !4)
!51 = !DILocation(line: 86, scope: !52, inlinedAt: !53)
!52 = distinct !DISubprogram(name: "-;", linkageName: "-", scope: !34, file: !34, type: !6, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !2, retainedNodes: !4)
!53 = !DILocation(line: 444, scope: !5)
!54 = !DILocation(line: 85, scope: !52, inlinedAt: !55)
!55 = !DILocation(line: 464, scope: !56, inlinedAt: !53)
!56 = distinct !DISubprogram(name: ">>;", linkageName: ">>", scope: !34, file: !34, type: !6, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !2, retainedNodes: !4)
!57 = !DILocation(line: 181, scope: !58, inlinedAt: !59)
!58 = distinct !DISubprogram(name: "scan1;", linkageName: "scan1", scope: !3, file: !3, type: !6, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !2, retainedNodes: !4)
!59 = !DILocation(line: 554, scope: !60, inlinedAt: !61)
!60 = distinct !DISubprogram(name: "trailing_zeros;", linkageName: "trailing_zeros", scope: !3, file: !3, type: !6, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !2, retainedNodes: !4)
!61 = !DILocation(line: 446, scope: !5)
!62 = !DILocation(line: 609, scope: !63, inlinedAt: !65)
!63 = distinct !DISubprogram(name: "is_top_bit_set;", linkageName: "is_top_bit_set", scope: !64, file: !64, type: !6, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !2, retainedNodes: !4)
!64 = !DIFile(filename: "boot.jl", directory: ".")
!65 = !DILocation(line: 619, scope: !66, inlinedAt: !67)
!66 = distinct !DISubprogram(name: "check_top_bit;", linkageName: "check_top_bit", scope: !64, file: !64, type: !6, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !2, retainedNodes: !4)
!67 = !DILocation(line: 680, scope: !68, inlinedAt: !69)
!68 = distinct !DISubprogram(name: "toInt64;", linkageName: "toInt64", scope: !64, file: !64, type: !6, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !2, retainedNodes: !4)
!69 = !DILocation(line: 755, scope: !70, inlinedAt: !57)
!70 = distinct !DISubprogram(name: "Int64;", linkageName: "Int64", scope: !64, file: !64, type: !6, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !2, retainedNodes: !4)
!71 = !DILocation(line: 444, scope: !72, inlinedAt: !55)
!72 = distinct !DISubprogram(name: "<=;", linkageName: "<=", scope: !34, file: !34, type: !6, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !2, retainedNodes: !4)
!73 = !DILocation(line: 459, scope: !74, inlinedAt: !55)
!74 = distinct !DISubprogram(name: "<<;", linkageName: "<<", scope: !34, file: !34, type: !6, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !2, retainedNodes: !4)
!75 = !DILocation(line: 458, scope: !56, inlinedAt: !55)
!76 = !DILocation(line: 474, scope: !77, inlinedAt: !53)
!77 = distinct !DISubprogram(name: "rem;", linkageName: "rem", scope: !34, file: !34, type: !6, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !2, retainedNodes: !4)
!78 = !DILocation(line: 87, scope: !79, inlinedAt: !80)
!79 = distinct !DISubprogram(name: "+;", linkageName: "+", scope: !34, file: !34, type: !6, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !2, retainedNodes: !4)
!80 = !DILocation(line: 445, scope: !5)
!81 = !DILocation(line: 458, scope: !56, inlinedAt: !82)
!82 = !DILocation(line: 464, scope: !56, inlinedAt: !80)
!83 = !DILocation(line: 409, scope: !15, inlinedAt: !61)
!84 = !DILocation(line: 715, scope: !85, inlinedAt: !86)
!85 = distinct !DISubprogram(name: "toUInt16;", linkageName: "toUInt16", scope: !64, file: !64, type: !6, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !2, retainedNodes: !4)
!86 = !DILocation(line: 758, scope: !87, inlinedAt: !61)
!87 = distinct !DISubprogram(name: "UInt16;", linkageName: "UInt16", scope: !64, file: !64, type: !6, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !2, retainedNodes: !4)
!88 = !DILocation(line: 287, scope: !89, inlinedAt: !61)
!89 = distinct !DISubprogram(name: "~;", linkageName: "~", scope: !34, file: !34, type: !6, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !2, retainedNodes: !4)
!90 = !DILocation(line: 311, scope: !91, inlinedAt: !61)
!91 = distinct !DISubprogram(name: "&;", linkageName: "&", scope: !34, file: !34, type: !6, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !2, retainedNodes: !4)
!92 = !DILocation(line: 474, scope: !77, inlinedAt: !93)
!93 = !DILocation(line: 447, scope: !5)
!94 = !DILocation(line: 459, scope: !74, inlinedAt: !95)
!95 = !DILocation(line: 466, scope: !74, inlinedAt: !93)
!96 = !DILocation(line: 87, scope: !79, inlinedAt: !97)
!97 = !DILocation(line: 448, scope: !5)
!98 = !DILocation(line: 424, scope: !99, inlinedAt: !97)
!99 = distinct !DISubprogram(name: "reinterpret;", linkageName: "reinterpret", scope: !100, file: !100, type: !6, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !2, retainedNodes: !4)
!100 = !DIFile(filename: "essentials.jl", directory: ".")
!101 = !DILocation(line: 33, scope: !18, inlinedAt: !102)
!102 = !DILocation(line: 450, scope: !5)
!103 = !DILocation(line: 83, scope: !38, inlinedAt: !104)
!104 = !DILocation(line: 360, scope: !50, inlinedAt: !105)
!105 = !DILocation(line: 129, scope: !106, inlinedAt: !107)
!106 = distinct !DISubprogram(name: "signbit;", linkageName: "signbit", scope: !34, file: !34, type: !6, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !2, retainedNodes: !4)
!107 = !DILocation(line: 167, scope: !108, inlinedAt: !102)
!108 = distinct !DISubprogram(name: "flipsign;", linkageName: "flipsign", scope: !109, file: !109, type: !6, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !2, retainedNodes: !4)
!109 = !DIFile(filename: "number.jl", directory: ".")
!110 = !DILocation(line: 346, scope: !111, inlinedAt: !107)
!111 = distinct !DISubprogram(name: "-;", linkageName: "-", scope: !112, file: !112, type: !6, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !2, retainedNodes: !4)
!112 = !DIFile(filename: "float.jl", directory: ".")
!113 = !{i64 16}
!114 = !{i64 8}
!115 = !{!116, !116, i64 0}
!116 = !{!"jtbaa_tag", !24, i64 0}
!117 = !{!118, !118, i64 0}
!118 = !{!"jtbaa_immut", !23, i64 0}
.text
; ┌ @ gmp.jl:436 within `Float16'
ld 2, -8(12)
add 2, 2, 12
mflr 0
std 28, -40(1)
std 29, -32(1)
std 30, -24(1)
stfd 31, -8(1)
std 0, 16(1)
stdu 1, -80(1)
mr 30, 3
li 3, 32767
; │ @ gmp.jl:437 within `Float16'
; │┌ @ gmp.jl:648 within `=='
; ││┌ @ gmp.jl:569 within `cmp'
; │││┌ @ gmp.jl:229 within `cmp_si'
li 4, 0
std 2, 24(1)
sldi 3, 3, 32
oris 3, 3, 32324
ori 29, 3, 44496
mr 3, 30
mtctr 29
mr 12, 29
bctrl
ld 2, 24(1)
; │└└└
cmplwi 3, 0
bt 2, .+300 # scan1;
; │ @ gmp.jl:438 within `Float16'
; │┌ @ Base.jl:33 within `getproperty'
ld 3, 8(30)
; │└
; │┌ @ pointer.jl:105 within `unsafe_load' @ pointer.jl:105
ldx 28, 0, 3
addis 3, 2, 0
ld 3, -32768(3)
; │└
; │ @ gmp.jl:440 within `Float16'
cmpldi 28, 65535
lfsx 31, 0, 3
bt 1, .+172 # scan1;
; │┌ @ Base.jl:33 within `getproperty'
lwz 3, 4(30)
; │└
; │┌ @ int.jl:172 within `abs'
; ││┌ @ int.jl:132 within `flipsign'
srawi 4, 3, 31
add 3, 3, 4
xor 3, 3, 4
; │└└
cmpwi 3, 1
bt 1, .+148 # scan1;
; │ @ gmp.jl within `Float16'
li 3, 0
; │ @ gmp.jl:446 within `Float16'
; │┌ @ gmp.jl:554 within `trailing_zeros'
; ││┌ @ gmp.jl:181 within `scan1'
li 4, 0
ori 3, 3, 62048
add 12, 29, 3
mr 3, 30
li 29, 0
mtctr 12
bctrl
ld 2, 24(1)
mr 4, 3
; │││┌ @ boot.jl:755 within `Int64'
; ││││┌ @ boot.jl:680 within `toInt64'
; │││││┌ @ boot.jl:619 within `check_top_bit'
cmpdi 3, -1
bf- 1, .+236 # >>;
; │└└└└└
; │ @ gmp.jl within `Float16'
cntlzd 3, 28
subfic 5, 3, 52
; │ @ gmp.jl:447 within `Float16'
; │┌ @ int.jl:466 within `<<' @ int.jl:459
slwi 3, 3, 10
; │└
; │ @ gmp.jl:444 within `Float16'
; │┌ @ int.jl:464 within `>>'
; ││┌ @ int.jl within `-'
neg 6, 5
; ││└
; ││ @ int.jl:464 within `>>' @ int.jl:458
srd 7, 28, 5
; │└
; │ @ gmp.jl:446 within `Float16'
; │┌ @ promotion.jl:409 within `=='
xor 4, 4, 5
; │└
; │ @ gmp.jl:444 within `Float16'
; │┌ @ int.jl:464 within `>>'
; ││┌ @ int.jl:459 within `<<'
cmpldi 6, 63
sld 6, 28, 6
; │└└
; │ @ gmp.jl:446 within `Float16'
; │┌ @ promotion.jl:409 within `=='
cntlzd 4, 4
; │└
; │ @ gmp.jl:444 within `Float16'
; │┌ @ int.jl:464 within `>>'
; ││┌ @ int.jl:459 within `<<'
iselgt 6, 0, 6
; ││└
; ││ @ int.jl:464 within `>>' @ int.jl:458
cmpldi 5, 63
iselgt 7, 29, 7
; ││ @ int.jl:464 within `>>'
cmpldi 28, 2048
isellt 6, 6, 7
; │└
; │ @ gmp.jl:446 within `Float16'
; │┌ @ promotion.jl:409 within `=='
rldicl 4, 4, 58, 63
; │└
; │ @ gmp.jl:445 within `Float16'
; │┌ @ int.jl:87 within `+'
addi 5, 6, 1
; │└
; │┌ @ int.jl:464 within `>>' @ int.jl:458
rlwinm 5, 5, 31, 17, 31
; │└
; │ @ gmp.jl:446 within `Float16'
; │┌ @ int.jl:311 within `&'
andc 4, 5, 4
; │└
; │ @ gmp.jl:448 within `Float16'
; │┌ @ int.jl:87 within `+'
sub 3, 4, 3
addi 3, 3, 13312
; │└
; │┌ @ essentials.jl:424 within `reinterpret'
clrldi 3, 3, 32
bl .+368 # Float16
ld 2, 24(1)
fmr 31, 1
; │└
; │ @ gmp.jl:450 within `Float16'
; │┌ @ number.jl:167 within `flipsign'
; ││┌ @ float.jl:346 within `-'
fmr 1, 31
; │└└
; │┌ @ Base.jl:33 within `getproperty'
lwz 30, 4(30)
; │└
; │┌ @ number.jl:167 within `flipsign'
; ││┌ @ float.jl:346 within `-'
bl .+392 # Float16
ld 2, 24(1)
bl .+340 # Float16
ld 2, 24(1)
xsnegdp 0, 31
fmr 31, 1
fmr 1, 0
bl .+364 # Float16
ld 2, 24(1)
bl .+312 # Float16
ld 2, 24(1)
; ││└
cmpwi 30, -1
bt 1, .+8 # flipsign;
fmr 31, 1
; │└
fmr 1, 31
addi 1, 1, 80
ld 0, 16(1)
lfd 31, -8(1)
Float16:
ld 30, -24(1)
ld 29, -32(1)
ld 28, -40(1)
mtlr 0
blr
; │ @ gmp.jl:437 within `Float16'
xxlxor 1, 1, 1
addi 1, 1, 80
ld 0, 16(1)
lfd 31, -8(1)
ld 30, -24(1)
ld 29, -32(1)
ld 28, -40(1)
mtlr 0
blr
; │ @ gmp.jl within `Float16'
li 3, 32767
sldi 3, 3, 32
oris 3, 3, 32601
ori 3, 3, 21408
; │ @ gmp.jl:446 within `Float16'
; │┌ @ gmp.jl:554 within `trailing_zeros'
; ││┌ @ gmp.jl:181 within `scan1'
; │││┌ @ boot.jl:755 within `Int64'
; ││││┌ @ boot.jl:680 within `toInt64'
; │││││┌ @ boot.jl:619 within `check_top_bit'
bl .+292
ld 2, 24(1)
trap
.long 0x000000
.long 0x000000
.long 0x000000
nop
nop
std 29, -4488(30)
fnmadd. 31, 31, 31, 31
; └└└└└└
; ModuleID = 'Float16'
source_filename = "Float16"
target datalayout = "e-m:e-i64:64-n32:64"
target triple = "powerpc64le-unknown-linux-gnu"
; @ gmp.jl:436 within `Float16'
define half @julia_Float16_235({} addrspace(10)* nonnull align 8 dereferenceable(16) %0) !dbg !5 {
top:
; @ gmp.jl:437 within `Float16'
; ┌ @ gmp.jl:648 within `=='
; │┌ @ gmp.jl:569 within `cmp'
; ││┌ @ gmp.jl:229 within `cmp_si'
%1 = bitcast {} addrspace(10)* %0 to i8 addrspace(10)*, !dbg !7
%2 = addrspacecast i8 addrspace(10)* %1 to i8*, !dbg !7
%3 = call i32 inttoptr (i64 140734941867472 to i32 (i8*, i64)*)(i8* nonnull %2, i64 0), !dbg !7
; │└└
; │ @ gmp.jl:648 within `==' @ promotion.jl:409
%.not = icmp eq i32 %3, 0, !dbg !14
; └
br i1 %.not, label %L11, label %L12, !dbg !13
L11: ; preds = %top
ret half 0xH0000, !dbg !13
L12: ; preds = %top
; @ gmp.jl:438 within `Float16'
; ┌ @ Base.jl:33 within `getproperty'
%4 = addrspacecast i8 addrspace(10)* %1 to i8 addrspace(11)*, !dbg !17
%5 = getelementptr inbounds i8, i8 addrspace(11)* %4, i64 8, !dbg !17
%6 = bitcast i8 addrspace(11)* %5 to i64* addrspace(11)*, !dbg !17
%7 = load i64*, i64* addrspace(11)* %6, align 8, !dbg !17, !tbaa !21
; └
; ┌ @ pointer.jl:105 within `unsafe_load' @ pointer.jl:105
%8 = load i64, i64* %7, align 1, !dbg !27, !tbaa !31
; └
; @ gmp.jl:439 within `Float16'
; ┌ @ int.jl:387 within `leading_zeros'
%9 = call i64 @llvm.ctlz.i64(i64 %8, i1 false), !dbg !32, !range !36
; └
; @ gmp.jl:440 within `Float16'
; ┌ @ operators.jl:362 within `>'
; │┌ @ int.jl:83 within `<'
%10 = icmp ugt i64 %8, 65535, !dbg !37
; └└
br i1 %10, label %L12.L78_crit_edge, label %L25, !dbg !42
L12.L78_crit_edge: ; preds = %L12
br label %L78, !dbg !42
L25: ; preds = %L12
; ┌ @ Base.jl:33 within `getproperty'
%11 = getelementptr inbounds i8, i8 addrspace(11)* %4, i64 4, !dbg !43
%12 = bitcast i8 addrspace(11)* %11 to i32 addrspace(11)*, !dbg !43
%13 = load i32, i32 addrspace(11)* %12, align 4, !dbg !43, !tbaa !21
; └
; ┌ @ int.jl:172 within `abs'
; │┌ @ int.jl:132 within `flipsign'
%14 = icmp slt i32 %13, 0, !dbg !44
%15 = sub i32 0, %13, !dbg !44
%16 = select i1 %14, i32 %15, i32 %13, !dbg !44
; └└
; ┌ @ operators.jl:362 within `>'
; │┌ @ promotion.jl:360 within `<' @ int.jl:83
%17 = icmp sgt i32 %16, 1, !dbg !48
; └└
br i1 %17, label %L78, label %L29, !dbg !42
L29: ; preds = %L25
; @ gmp.jl:444 within `Float16'
; ┌ @ int.jl:86 within `-'
%18 = sub nsw i64 52, %9, !dbg !51
; └
; ┌ @ int.jl:464 within `>>'
; │┌ @ int.jl:85 within `-'
%19 = sub nsw i64 0, %18, !dbg !54
; └└
; @ gmp.jl:446 within `Float16'
; ┌ @ gmp.jl:554 within `trailing_zeros'
; │┌ @ gmp.jl:181 within `scan1'
%20 = call i64 inttoptr (i64 140734941929520 to i64 (i8*, i64)*)(i8* nonnull %2, i64 0), !dbg !57
; ││┌ @ boot.jl:755 within `Int64'
; │││┌ @ boot.jl:680 within `toInt64'
; ││││┌ @ boot.jl:619 within `check_top_bit'
; │││││┌ @ boot.jl:609 within `is_top_bit_set'
%21 = icmp sgt i64 %20, -1, !dbg !62
; │││││└
br i1 %21, label %L61, label %L53, !dbg !65
L53: ; preds = %L29
%22 = call nonnull {} addrspace(10)* @j_throw_inexacterror_237({} addrspace(10)* addrspacecast ({}* inttoptr (i64 140734959997856 to {}*) to {} addrspace(10)*), i64 zeroext %20), !dbg !65
call void @llvm.trap(), !dbg !65
unreachable, !dbg !65
L61: ; preds = %L29
; └└└└└
; @ gmp.jl:444 within `Float16'
; ┌ @ int.jl:464 within `>>'
; │┌ @ int.jl:444 within `<='
%23 = icmp ult i64 %8, 2048, !dbg !71
; │└
; │┌ @ int.jl:459 within `<<'
%24 = icmp ugt i64 %19, 63, !dbg !73
%25 = shl i64 %8, %19, !dbg !73
%26 = select i1 %24, i64 0, i64 %25, !dbg !73
; │└
; │ @ int.jl:464 within `>>' @ int.jl:458
%27 = icmp ugt i64 %18, 63, !dbg !75
%28 = lshr i64 %8, %18, !dbg !75
%29 = select i1 %27, i64 0, i64 %28, !dbg !75
; │ @ int.jl:464 within `>>'
%30 = select i1 %23, i64 %26, i64 %29, !dbg !55
; └
; ┌ @ int.jl:474 within `rem'
%31 = trunc i64 %30 to i16, !dbg !76
; └
; @ gmp.jl:445 within `Float16'
; ┌ @ int.jl:87 within `+'
%32 = add i16 %31, 1, !dbg !78
; └
; ┌ @ int.jl:464 within `>>' @ int.jl:458
%33 = lshr i16 %32, 1, !dbg !81
; └
; @ gmp.jl:446 within `Float16'
; ┌ @ promotion.jl:409 within `=='
%34 = icmp eq i64 %20, %18, !dbg !83
; └
; ┌ @ boot.jl:758 within `UInt16'
; │┌ @ boot.jl:715 within `toUInt16'
%35 = zext i1 %34 to i16, !dbg !84
; └└
; ┌ @ int.jl:287 within `~'
%36 = xor i16 %35, -1, !dbg !88
; └
; ┌ @ int.jl:311 within `&'
%37 = and i16 %33, %36, !dbg !90
; └
; @ gmp.jl:447 within `Float16'
; ┌ @ int.jl:474 within `rem'
%38 = trunc i64 %9 to i16, !dbg !92
; └
; ┌ @ int.jl:466 within `<<' @ int.jl:459
%39 = shl i16 %38, 10, !dbg !94
%40 = sub i16 13312, %39, !dbg !94
; └
; @ gmp.jl:448 within `Float16'
; ┌ @ int.jl:87 within `+'
%41 = add i16 %40, %37, !dbg !96
; └
; ┌ @ essentials.jl:424 within `reinterpret'
%42 = bitcast i16 %41 to half, !dbg !98
br label %L78, !dbg !98
L78: ; preds = %L12.L78_crit_edge, %L25, %L61
%value_phi1 = phi half [ %42, %L61 ], [ 0xH7C00, %L25 ], [ 0xH7C00, %L12.L78_crit_edge ]
; └
; @ gmp.jl:450 within `Float16'
; ┌ @ Base.jl:33 within `getproperty'
%43 = getelementptr inbounds i8, i8 addrspace(11)* %4, i64 4, !dbg !101
%44 = bitcast i8 addrspace(11)* %43 to i32 addrspace(11)*, !dbg !101
%45 = load i32, i32 addrspace(11)* %44, align 4, !dbg !101, !tbaa !21
; └
; ┌ @ number.jl:167 within `flipsign'
; │┌ @ int.jl:129 within `signbit'
; ││┌ @ promotion.jl:360 within `<' @ int.jl:83
%46 = icmp sgt i32 %45, -1, !dbg !103
; │└└
; │┌ @ float.jl:346 within `-'
%47 = fpext half %value_phi1 to float, !dbg !110
%48 = fneg float %47, !dbg !110
%49 = fptrunc float %48 to half, !dbg !110
; │└
%50 = select i1 %46, half %value_phi1, half %49, !dbg !107
; └
ret half %50, !dbg !102
}
define nonnull {} addrspace(10)* @jfptr_Float16_236({} addrspace(10)* %0, {} addrspace(10)** %1, i32 %2) #0 {
top:
%3 = call {}*** inttoptr (i64 268438016 to {}*** ()*)() #2
%4 = load {} addrspace(10)*, {} addrspace(10)** %1, align 8, !nonnull !4, !dereferenceable !113, !align !114
%5 = call half @julia_Float16_235({} addrspace(10)* %4)
%6 = bitcast {}*** %3 to i8*
%7 = call noalias nonnull {} addrspace(10)* @jl_gc_pool_alloc(i8* %6, i32 1400, i32 16) #1
%8 = bitcast {} addrspace(10)* %7 to i64 addrspace(10)*
%9 = getelementptr inbounds i64, i64 addrspace(10)* %8, i64 -1
store atomic i64 140735041422224, i64 addrspace(10)* %9 unordered, align 8, !tbaa !115
%10 = bitcast {} addrspace(10)* %7 to half addrspace(10)*
store half %5, half addrspace(10)* %10, align 8, !tbaa !117
ret {} addrspace(10)* %7
}
; Function Attrs: allocsize(1)
declare noalias nonnull {} addrspace(10)* @julia.gc_alloc_obj(i8*, i64, {} addrspace(10)*) #1
; Function Attrs: nounwind readnone
declare nonnull {}* @julia.pointer_from_objref({} addrspace(11)*) #2
; Function Attrs: nounwind readnone speculatable willreturn
declare i64 @llvm.ctlz.i64(i64, i1 immarg) #3
declare nonnull {} addrspace(10)* @j_throw_inexacterror_237({} addrspace(10)*, i64 zeroext)
; Function Attrs: cold noreturn nounwind
declare void @llvm.trap() #4
; Function Attrs: argmemonly nounwind willreturn
declare void @llvm.lifetime.start.p0i8(i64 immarg, i8* nocapture) #5
; Function Attrs: argmemonly nounwind willreturn
declare void @llvm.lifetime.end.p0i8(i64 immarg, i8* nocapture) #5
; Function Attrs: inaccessiblemem_or_argmemonly
declare void @jl_gc_queue_root({} addrspace(10)*) #6
; Function Attrs: allocsize(1)
declare noalias nonnull {} addrspace(10)* @jl_gc_pool_alloc(i8*, i32, i32) #1
; Function Attrs: allocsize(1)
declare noalias nonnull {} addrspace(10)* @jl_gc_big_alloc(i8*, i64) #1
; Function Attrs: allocsize(1)
declare noalias nonnull {} addrspace(10)* @julia.gc_alloc_bytes(i8*, i64) #1
attributes #0 = { "thunk" }
attributes #1 = { allocsize(1) }
attributes #2 = { nounwind readnone }
attributes #3 = { nounwind readnone speculatable willreturn }
attributes #4 = { cold noreturn nounwind }
attributes #5 = { argmemonly nounwind willreturn }
attributes #6 = { inaccessiblemem_or_argmemonly }
!llvm.module.flags = !{!0, !1}
!llvm.dbg.cu = !{!2}
!0 = !{i32 2, !"Dwarf Version", i32 4}
!1 = !{i32 1, !"Debug Info Version", i32 3}
!2 = distinct !DICompileUnit(language: DW_LANG_Julia, file: !3, producer: "julia", isOptimized: true, runtimeVersion: 0, emissionKind: FullDebug, enums: !4, nameTableKind: GNU)
!3 = !DIFile(filename: "gmp.jl", directory: ".")
!4 = !{}
!5 = distinct !DISubprogram(name: "Float16", linkageName: "julia_Float16_235", scope: null, file: !3, line: 436, type: !6, scopeLine: 436, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !2, retainedNodes: !4)
!6 = !DISubroutineType(types: !4)
!7 = !DILocation(line: 229, scope: !8, inlinedAt: !9)
!8 = distinct !DISubprogram(name: "cmp_si;", linkageName: "cmp_si", scope: !3, file: !3, type: !6, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !2, retainedNodes: !4)
!9 = !DILocation(line: 569, scope: !10, inlinedAt: !11)
!10 = distinct !DISubprogram(name: "cmp;", linkageName: "cmp", scope: !3, file: !3, type: !6, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !2, retainedNodes: !4)
!11 = !DILocation(line: 648, scope: !12, inlinedAt: !13)
!12 = distinct !DISubprogram(name: "==;", linkageName: "==", scope: !3, file: !3, type: !6, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !2, retainedNodes: !4)
!13 = !DILocation(line: 437, scope: !5)
!14 = !DILocation(line: 409, scope: !15, inlinedAt: !11)
!15 = distinct !DISubprogram(name: "==;", linkageName: "==", scope: !16, file: !16, type: !6, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !2, retainedNodes: !4)
!16 = !DIFile(filename: "promotion.jl", directory: ".")
!17 = !DILocation(line: 33, scope: !18, inlinedAt: !20)
!18 = distinct !DISubprogram(name: "getproperty;", linkageName: "getproperty", scope: !19, file: !19, type: !6, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !2, retainedNodes: !4)
!19 = !DIFile(filename: "Base.jl", directory: ".")
!20 = !DILocation(line: 438, scope: !5)
!21 = !{!22, !22, i64 0}
!22 = !{!"jtbaa_mutab", !23, i64 0}
!23 = !{!"jtbaa_value", !24, i64 0}
!24 = !{!"jtbaa_data", !25, i64 0}
!25 = !{!"jtbaa", !26, i64 0}
!26 = !{!"jtbaa"}
!27 = !DILocation(line: 105, scope: !28, inlinedAt: !30)
!28 = distinct !DISubprogram(name: "unsafe_load;", linkageName: "unsafe_load", scope: !29, file: !29, type: !6, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !2, retainedNodes: !4)
!29 = !DIFile(filename: "pointer.jl", directory: ".")
!30 = !DILocation(line: 105, scope: !28, inlinedAt: !20)
!31 = !{!24, !24, i64 0}
!32 = !DILocation(line: 387, scope: !33, inlinedAt: !35)
!33 = distinct !DISubprogram(name: "leading_zeros;", linkageName: "leading_zeros", scope: !34, file: !34, type: !6, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !2, retainedNodes: !4)
!34 = !DIFile(filename: "int.jl", directory: ".")
!35 = !DILocation(line: 439, scope: !5)
!36 = !{i64 0, i64 65}
!37 = !DILocation(line: 83, scope: !38, inlinedAt: !39)
!38 = distinct !DISubprogram(name: "<;", linkageName: "<", scope: !34, file: !34, type: !6, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !2, retainedNodes: !4)
!39 = !DILocation(line: 362, scope: !40, inlinedAt: !42)
!40 = distinct !DISubprogram(name: ">;", linkageName: ">", scope: !41, file: !41, type: !6, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !2, retainedNodes: !4)
!41 = !DIFile(filename: "operators.jl", directory: ".")
!42 = !DILocation(line: 440, scope: !5)
!43 = !DILocation(line: 33, scope: !18, inlinedAt: !42)
!44 = !DILocation(line: 132, scope: !45, inlinedAt: !46)
!45 = distinct !DISubprogram(name: "flipsign;", linkageName: "flipsign", scope: !34, file: !34, type: !6, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !2, retainedNodes: !4)
!46 = !DILocation(line: 172, scope: !47, inlinedAt: !42)
!47 = distinct !DISubprogram(name: "abs;", linkageName: "abs", scope: !34, file: !34, type: !6, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !2, retainedNodes: !4)
!48 = !DILocation(line: 83, scope: !38, inlinedAt: !49)
!49 = !DILocation(line: 360, scope: !50, inlinedAt: !39)
!50 = distinct !DISubprogram(name: "<;", linkageName: "<", scope: !16, file: !16, type: !6, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !2, retainedNodes: !4)
!51 = !DILocation(line: 86, scope: !52, inlinedAt: !53)
!52 = distinct !DISubprogram(name: "-;", linkageName: "-", scope: !34, file: !34, type: !6, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !2, retainedNodes: !4)
!53 = !DILocation(line: 444, scope: !5)
!54 = !DILocation(line: 85, scope: !52, inlinedAt: !55)
!55 = !DILocation(line: 464, scope: !56, inlinedAt: !53)
!56 = distinct !DISubprogram(name: ">>;", linkageName: ">>", scope: !34, file: !34, type: !6, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !2, retainedNodes: !4)
!57 = !DILocation(line: 181, scope: !58, inlinedAt: !59)
!58 = distinct !DISubprogram(name: "scan1;", linkageName: "scan1", scope: !3, file: !3, type: !6, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !2, retainedNodes: !4)
!59 = !DILocation(line: 554, scope: !60, inlinedAt: !61)
!60 = distinct !DISubprogram(name: "trailing_zeros;", linkageName: "trailing_zeros", scope: !3, file: !3, type: !6, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !2, retainedNodes: !4)
!61 = !DILocation(line: 446, scope: !5)
!62 = !DILocation(line: 609, scope: !63, inlinedAt: !65)
!63 = distinct !DISubprogram(name: "is_top_bit_set;", linkageName: "is_top_bit_set", scope: !64, file: !64, type: !6, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !2, retainedNodes: !4)
!64 = !DIFile(filename: "boot.jl", directory: ".")
!65 = !DILocation(line: 619, scope: !66, inlinedAt: !67)
!66 = distinct !DISubprogram(name: "check_top_bit;", linkageName: "check_top_bit", scope: !64, file: !64, type: !6, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !2, retainedNodes: !4)
!67 = !DILocation(line: 680, scope: !68, inlinedAt: !69)
!68 = distinct !DISubprogram(name: "toInt64;", linkageName: "toInt64", scope: !64, file: !64, type: !6, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !2, retainedNodes: !4)
!69 = !DILocation(line: 755, scope: !70, inlinedAt: !57)
!70 = distinct !DISubprogram(name: "Int64;", linkageName: "Int64", scope: !64, file: !64, type: !6, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !2, retainedNodes: !4)
!71 = !DILocation(line: 444, scope: !72, inlinedAt: !55)
!72 = distinct !DISubprogram(name: "<=;", linkageName: "<=", scope: !34, file: !34, type: !6, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !2, retainedNodes: !4)
!73 = !DILocation(line: 459, scope: !74, inlinedAt: !55)
!74 = distinct !DISubprogram(name: "<<;", linkageName: "<<", scope: !34, file: !34, type: !6, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !2, retainedNodes: !4)
!75 = !DILocation(line: 458, scope: !56, inlinedAt: !55)
!76 = !DILocation(line: 474, scope: !77, inlinedAt: !53)
!77 = distinct !DISubprogram(name: "rem;", linkageName: "rem", scope: !34, file: !34, type: !6, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !2, retainedNodes: !4)
!78 = !DILocation(line: 87, scope: !79, inlinedAt: !80)
!79 = distinct !DISubprogram(name: "+;", linkageName: "+", scope: !34, file: !34, type: !6, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !2, retainedNodes: !4)
!80 = !DILocation(line: 445, scope: !5)
!81 = !DILocation(line: 458, scope: !56, inlinedAt: !82)
!82 = !DILocation(line: 464, scope: !56, inlinedAt: !80)
!83 = !DILocation(line: 409, scope: !15, inlinedAt: !61)
!84 = !DILocation(line: 715, scope: !85, inlinedAt: !86)
!85 = distinct !DISubprogram(name: "toUInt16;", linkageName: "toUInt16", scope: !64, file: !64, type: !6, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !2, retainedNodes: !4)
!86 = !DILocation(line: 758, scope: !87, inlinedAt: !61)
!87 = distinct !DISubprogram(name: "UInt16;", linkageName: "UInt16", scope: !64, file: !64, type: !6, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !2, retainedNodes: !4)
!88 = !DILocation(line: 287, scope: !89, inlinedAt: !61)
!89 = distinct !DISubprogram(name: "~;", linkageName: "~", scope: !34, file: !34, type: !6, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !2, retainedNodes: !4)
!90 = !DILocation(line: 311, scope: !91, inlinedAt: !61)
!91 = distinct !DISubprogram(name: "&;", linkageName: "&", scope: !34, file: !34, type: !6, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !2, retainedNodes: !4)
!92 = !DILocation(line: 474, scope: !77, inlinedAt: !93)
!93 = !DILocation(line: 447, scope: !5)
!94 = !DILocation(line: 459, scope: !74, inlinedAt: !95)
!95 = !DILocation(line: 466, scope: !74, inlinedAt: !93)
!96 = !DILocation(line: 87, scope: !79, inlinedAt: !97)
!97 = !DILocation(line: 448, scope: !5)
!98 = !DILocation(line: 424, scope: !99, inlinedAt: !97)
!99 = distinct !DISubprogram(name: "reinterpret;", linkageName: "reinterpret", scope: !100, file: !100, type: !6, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !2, retainedNodes: !4)
!100 = !DIFile(filename: "essentials.jl", directory: ".")
!101 = !DILocation(line: 33, scope: !18, inlinedAt: !102)
!102 = !DILocation(line: 450, scope: !5)
!103 = !DILocation(line: 83, scope: !38, inlinedAt: !104)
!104 = !DILocation(line: 360, scope: !50, inlinedAt: !105)
!105 = !DILocation(line: 129, scope: !106, inlinedAt: !107)
!106 = distinct !DISubprogram(name: "signbit;", linkageName: "signbit", scope: !34, file: !34, type: !6, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !2, retainedNodes: !4)
!107 = !DILocation(line: 167, scope: !108, inlinedAt: !102)
!108 = distinct !DISubprogram(name: "flipsign;", linkageName: "flipsign", scope: !109, file: !109, type: !6, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !2, retainedNodes: !4)
!109 = !DIFile(filename: "number.jl", directory: ".")
!110 = !DILocation(line: 346, scope: !111, inlinedAt: !107)
!111 = distinct !DISubprogram(name: "-;", linkageName: "-", scope: !112, file: !112, type: !6, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !2, retainedNodes: !4)
!112 = !DIFile(filename: "float.jl", directory: ".")
!113 = !{i64 16}
!114 = !{i64 8}
!115 = !{!116, !116, i64 0}
!116 = !{!"jtbaa_tag", !24, i64 0}
!117 = !{!118, !118, i64 0}
!118 = !{!"jtbaa_immut", !23, i64 0}
.text
; ┌ @ gmp.jl:436 within `Float16'
ld 2, -8(12)
add 2, 2, 12
mflr 0
std 28, -32(1)
std 29, -24(1)
std 30, -16(1)
std 0, 16(1)
stdu 1, -64(1)
mr 30, 3
li 3, 32767
sldi 3, 3, 32
oris 3, 3, 35166
ori 29, 3, 44496
; │ @ gmp.jl:437 within `Float16'
; │┌ @ gmp.jl:648 within `=='
; ││┌ @ gmp.jl:569 within `cmp'
; │││┌ @ gmp.jl:229 within `cmp_si'
mr 3, 30
mtctr 29
li 4, 0
mr 12, 29
std 2, 24(1)
bctrl
ld 2, 24(1)
; │└└└
cmplwi 3, 0
bt 2, .+272 # scan1;
; │ @ gmp.jl:438 within `Float16'
; │┌ @ Base.jl:33 within `getproperty'
ld 3, 8(30)
; │└
; │┌ @ pointer.jl:105 within `unsafe_load' @ pointer.jl:105
ldx 28, 0, 3
addis 3, 2, 0
ld 3, -32768(3)
; │└
; │ @ gmp.jl:440 within `Float16'
cmpldi 28, 65535
lfs 0, 0(3)
bt 1, .+164 # scan1;
; │┌ @ Base.jl:33 within `getproperty'
lwz 3, 4(30)
; │└
; │┌ @ int.jl:172 within `abs'
; ││┌ @ int.jl:132 within `flipsign'
srawi 4, 3, 31
add 3, 3, 4
xor 3, 3, 4
; │└└
cmpwi 3, 1
bt 1, .+140 # scan1;
; │ @ gmp.jl within `Float16'
li 3, 0
ori 3, 3, 62048
; │ @ gmp.jl:446 within `Float16'
; │┌ @ gmp.jl:554 within `trailing_zeros'
; ││┌ @ gmp.jl:181 within `scan1'
add 12, 29, 3
"scan1;":
mr 3, 30
li 29, 0
mtctr 12
li 4, 0
bctrl
ld 2, 24(1)
mr 4, 3
; │││┌ @ boot.jl:755 within `Int64'
; ││││┌ @ boot.jl:680 within `toInt64'
; │││││┌ @ boot.jl:619 within `check_top_bit'
cmpdi 3, -1
bf- 1, .+204 # ==;
; │└└└└└
; │ @ gmp.jl within `Float16'
cntlzd 3, 28
subfic 5, 3, 52
; │ @ gmp.jl:447 within `Float16'
; │┌ @ int.jl:466 within `<<' @ int.jl:459
slwi 3, 3, 10
; │└
; │ @ gmp.jl:444 within `Float16'
; │┌ @ int.jl:464 within `>>'
; ││┌ @ int.jl within `-'
neg 6, 5
; ││└
; ││┌ @ int.jl:459 within `<<'
sld 7, 28, 6
cmpldi 6, 63
iselgt 6, 0, 7
; ││└
; ││ @ int.jl:464 within `>>' @ int.jl:458
srd 7, 28, 5
cmpldi 5, 63
iselgt 7, 29, 7
; ││ @ int.jl:464 within `>>'
cmpldi 28, 2048
; │└
; │ @ gmp.jl:446 within `Float16'
; │┌ @ promotion.jl:409 within `=='
xor 4, 4, 5
cntlzd 4, 4
rldicl 4, 4, 58, 63
; │└
; │ @ gmp.jl:444 within `Float16'
; │┌ @ int.jl:464 within `>>'
isellt 6, 6, 7
; │└
; │ @ gmp.jl:445 within `Float16'
; │┌ @ int.jl:87 within `+'
addi 6, 6, 1
; │└
; │┌ @ int.jl:464 within `>>' @ int.jl:458
rlwinm 6, 6, 31, 17, 31
; │└
; │ @ gmp.jl:446 within `Float16'
; │┌ @ int.jl:311 within `&'
andc 4, 6, 4
; │└
; │ @ gmp.jl:448 within `Float16'
; │┌ @ int.jl:87 within `+'
sub 3, 4, 3
addi 3, 3, 13312
; │└
; │┌ @ essentials.jl:424 within `reinterpret'
mtfprwz 0, 3
xscvhpdp 0, 0
; │└
; │ @ gmp.jl:450 within `Float16'
; │┌ @ Base.jl:33 within `getproperty'
lwz 3, 4(30)
; │└
; │┌ @ number.jl:167 within `flipsign'
; ││┌ @ float.jl:346 within `-'
xscvdphp 1, 0
xsnegdp 0, 0
; ││└
cmpwi 3, -1
; ││┌ @ float.jl:346 within `-'
mffprwz 4, 1
mtfprwz 1, 4
xscvhpdp 1, 1
xscvdphp 0, 0
mffprwz 4, 0
mtfprwz 0, 4
xscvhpdp 0, 0
; ││└
bt 1, .+8 # flipsign;
fmr 1, 0
; │└
addi 1, 1, 64
ld 0, 16(1)
ld 30, -16(1)
ld 29, -24(1)
ld 28, -32(1)
mtlr 0
blr
; │ @ gmp.jl:437 within `Float16'
xxlxor 1, 1, 1
addi 1, 1, 64
ld 0, 16(1)
ld 30, -16(1)
ld 29, -24(1)
ld 28, -32(1)
mtlr 0
blr
; │ @ gmp.jl within `Float16'
li 3, 32767
sldi 3, 3, 32
oris 3, 3, 35443
ori 3, 3, 21408
; │ @ gmp.jl:446 within `Float16'
; │┌ @ gmp.jl:554 within `trailing_zeros'
; ││┌ @ gmp.jl:181 within `scan1'
; │││┌ @ boot.jl:755 within `Int64'
; ││││┌ @ boot.jl:680 within `toInt64'
; │││││┌ @ boot.jl:619 within `check_top_bit'
bl .+208
ld 2, 24(1)
trap
.long 0x000000
.long 0x000000
.long 0x000000
nop
nop
nop
std 30, 1288(0)
fnmadd. 31, 31, 31, 31
; └└└└└└
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment