Last active
January 20, 2021 03:10
-
-
Save vchuravy/a0170b4d42e46d800aae53b3a80bb582 to your computer and use it in GitHub Desktop.
Conversion from BigInt to Float16 on PowerPC
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
; 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} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
.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 | |
; └└└└└└ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
; 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} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
.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