Zig 0.17.0-dev (Split by item)

This is an example of documentation generated by ZigDoc, an alternative to Zig's built-in Auto Doc feature. See also examples in other modes/formats. The project being documented here (as the example) is the Zig library itself.

__hexagon_adddf3

hexagon.__hexagon_adddf3
fn __hexagon_adddf3() align(32) callconv(.naked) noreturn

File

lib/compiler_rt/hexagon.zig:512

Code

fn __hexagon_adddf3() align(32) callconv(.naked) noreturn {
    asm volatile (
        \\  {
        \\   r4 = extractu(r1,#11,#20)
        \\   r5 = extractu(r3,#11,#20)
        \\   r13:12 = combine(##0x20000000,#0)
        \\  }
        \\  {
        \\   p3 = dfclass(r1:0,#2)
        \\   p3 = dfclass(r3:2,#2)
        \\   r9:8 = r13:12
        \\   p2 = cmp.gtu(r5,r4)
        \\  }
        \\  {
        \\   if (!p3) jump .Ladd_abnormal
        \\   if (p2) r1:0 = r3:2
        \\   if (p2) r3:2 = r1:0
        \\   if (p2) r5:4 = combine(r4,r5)
        \\  }
        \\  {
        \\   r13:12 = insert(r1:0,#52,#11 -2)
        \\   r9:8 = insert(r3:2,#52,#11 -2)
        \\   r15 = sub(r4,r5)
        \\   r7:6 = combine(#62,#1)
        \\  }
        \\
        \\
        \\
        \\
        \\
        \\ .Ladd_continue:
        \\  {
        \\   r15 = min(r15,r7)
        \\
        \\   r11:10 = neg(r13:12)
        \\   p2 = cmp.gt(r1,#-1)
        \\   r14 = #0
        \\  }
        \\  {
        \\   if (!p2) r13:12 = r11:10
        \\   r11:10 = extractu(r9:8,r15:14)
        \\   r9:8 = ASR(r9:8,r15)
        \\
        \\
        \\
        \\
        \\   r15:14 = #0
        \\  }
        \\  {
        \\   p1 = cmp.eq(r11:10,r15:14)
        \\   if (!p1.new) r8 = or(r8,r6)
        \\   r5 = add(r4,#-1024 -60)
        \\   p3 = cmp.gt(r3,#-1)
        \\  }
        \\  {
        \\   r13:12 = add(r13:12,r9:8)
        \\   r11:10 = sub(r13:12,r9:8)
        \\   r7:6 = combine(#54,##2045)
        \\  }
        \\  {
        \\   p0 = cmp.gtu(r4,r7)
        \\   p0 = !cmp.gtu(r4,r6)
        \\   if (!p0.new) jump:nt .Ladd_ovf_unf
        \\   if (!p3) r13:12 = r11:10
        \\  }
        \\  {
        \\   r1:0 = convert_d2df(r13:12)
        \\   p0 = cmp.eq(r13,#0)
        \\   p0 = cmp.eq(r12,#0)
        \\   if (p0.new) jump:nt .Ladd_zero
        \\  }
        \\  {
        \\   r1 += asl(r5,#20)
        \\   jumpr r31
        \\  }
        \\
        \\  .falign
        \\ .Ladd_zero:
        \\
        \\
        \\  {
        \\   r28 = USR
        \\   r1:0 = #0
        \\   r3 = #1
        \\  }
        \\  {
        \\   r28 = extractu(r28,#2,#22)
        \\   r3 = asl(r3,#31)
        \\  }
        \\  {
        \\   p0 = cmp.eq(r28,#2)
        \\   if (p0.new) r1 = xor(r1,r3)
        \\   jumpr r31
        \\  }
        \\  .falign
        \\ .Ladd_ovf_unf:
        \\  {
        \\   r1:0 = convert_d2df(r13:12)
        \\   p0 = cmp.eq(r13,#0)
        \\   p0 = cmp.eq(r12,#0)
        \\   if (p0.new) jump:nt .Ladd_zero
        \\  }
        \\  {
        \\   r28 = extractu(r1,#11,#20)
        \\   r1 += asl(r5,#20)
        \\  }
        \\  {
        \\   r5 = add(r5,r28)
        \\   r3:2 = combine(##0x00100000,#0)
        \\  }
        \\  {
        \\   p0 = cmp.gt(r5,##1024 +1024 -2)
        \\   if (p0.new) jump:nt .Ladd_ovf
        \\  }
        \\  {
        \\   p0 = cmp.gt(r5,#0)
        \\   if (p0.new) jumpr:t r31
        \\   r28 = sub(#1,r5)
        \\  }
        \\  {
        \\   r3:2 = insert(r1:0,#52,#0)
        \\   r1:0 = r13:12
        \\  }
        \\  {
        \\   r3:2 = lsr(r3:2,r28)
        \\  }
        \\  {
        \\   r1:0 = insert(r3:2,#63,#0)
        \\   jumpr r31
        \\  }
        \\  .falign
        \\ .Ladd_ovf:
        \\
        \\  {
        \\   r1:0 = r13:12
        \\   r28 = USR
        \\   r13:12 = combine(##0x7fefffff,#-1)
        \\  }
        \\  {
        \\   r5 = extractu(r28,#2,#22)
        \\   r28 = or(r28,#0x28)
        \\   r9:8 = combine(##0x7ff00000,#0)
        \\  }
        \\  {
        \\   USR = r28
        \\   r5 ^= lsr(r1,#31)
        \\   r28 = r5
        \\  }
        \\  {
        \\   p0 = !cmp.eq(r28,#1)
        \\   p0 = !cmp.eq(r5,#2)
        \\   if (p0.new) r13:12 = r9:8
        \\  }
        \\  {
        \\   r1:0 = insert(r13:12,#63,#0)
        \\  }
        \\  {
        \\   p0 = dfcmp.eq(r1:0,r1:0)
        \\   jumpr r31
        \\  }
        \\
        \\ .Ladd_abnormal:
        \\  {
        \\   r13:12 = extractu(r1:0,#63,#0)
        \\   r9:8 = extractu(r3:2,#63,#0)
        \\  }
        \\  {
        \\   p3 = cmp.gtu(r13:12,r9:8)
        \\   if (!p3.new) r1:0 = r3:2
        \\   if (!p3.new) r3:2 = r1:0
        \\  }
        \\  {
        \\
        \\   p0 = dfclass(r1:0,#0x0f)
        \\   if (!p0.new) jump:nt .Linvalid_nan_add
        \\   if (!p3) r13:12 = r9:8
        \\   if (!p3) r9:8 = r13:12
        \\  }
        \\  {
        \\
        \\
        \\   p1 = dfclass(r1:0,#0x08)
        \\   if (p1.new) jump:nt .Linf_add
        \\  }
        \\  {
        \\   p2 = dfclass(r3:2,#0x01)
        \\   if (p2.new) jump:nt .LB_zero
        \\   r13:12 = #0
        \\  }
        \\
        \\  {
        \\   p0 = dfclass(r1:0,#4)
        \\   if (p0.new) jump:nt .Ladd_two_subnormal
        \\   r13:12 = combine(##0x20000000,#0)
        \\  }
        \\  {
        \\   r4 = extractu(r1,#11,#20)
        \\   r5 = #1
        \\
        \\   r9:8 = asl(r9:8,#11 -2)
        \\  }
        \\
        \\
        \\
        \\  {
        \\   r13:12 = insert(r1:0,#52,#11 -2)
        \\   r15 = sub(r4,r5)
        \\   r7:6 = combine(#62,#1)
        \\   jump .Ladd_continue
        \\  }
        \\
        \\ .Ladd_two_subnormal:
        \\  {
        \\   r13:12 = extractu(r1:0,#63,#0)
        \\   r9:8 = extractu(r3:2,#63,#0)
        \\  }
        \\  {
        \\   r13:12 = neg(r13:12)
        \\   r9:8 = neg(r9:8)
        \\   p0 = cmp.gt(r1,#-1)
        \\   p1 = cmp.gt(r3,#-1)
        \\  }
        \\  {
        \\   if (p0) r13:12 = r1:0
        \\   if (p1) r9:8 = r3:2
        \\  }
        \\  {
        \\   r13:12 = add(r13:12,r9:8)
        \\  }
        \\  {
        \\   r9:8 = neg(r13:12)
        \\   p0 = cmp.gt(r13,#-1)
        \\   r3:2 = #0
        \\  }
        \\  {
        \\   if (!p0) r1:0 = r9:8
        \\   if (p0) r1:0 = r13:12
        \\   r3 = ##0x80000000
        \\  }
        \\  {
        \\   if (!p0) r1 = or(r1,r3)
        \\   p0 = dfcmp.eq(r1:0,r3:2)
        \\   if (p0.new) jump:nt .Lzero_plus_zero
        \\  }
        \\  {
        \\   jumpr r31
        \\  }
        \\
        \\ .Linvalid_nan_add:
        \\  {
        \\   r28 = convert_df2sf(r1:0)
        \\   p0 = dfclass(r3:2,#0x0f)
        \\   if (p0.new) r3:2 = r1:0
        \\  }
        \\  {
        \\   r2 = convert_df2sf(r3:2)
        \\   r1:0 = #-1
        \\   jumpr r31
        \\  }
        \\  .falign
        \\ .LB_zero:
        \\  {
        \\   p0 = dfcmp.eq(r13:12,r1:0)
        \\   if (!p0.new) jumpr:t r31
        \\  }
        \\
        \\
        \\
        \\
        \\ .Lzero_plus_zero:
        \\  {
        \\   p0 = cmp.eq(r1:0,r3:2)
        \\   if (p0.new) jumpr:t r31
        \\  }
        \\  {
        \\   r28 = USR
        \\  }
        \\  {
        \\   r28 = extractu(r28,#2,#22)
        \\   r1:0 = #0
        \\  }
        \\  {
        \\   p0 = cmp.eq(r28,#2)
        \\   if (p0.new) r1 = ##0x80000000
        \\   jumpr r31
        \\  }
        \\ .Linf_add:
        \\
        \\  {
        \\   p0 = !cmp.eq(r1,r3)
        \\   p0 = dfclass(r3:2,#8)
        \\   if (!p0.new) jumpr:t r31
        \\  }
        \\  {
        \\   r2 = ##0x7f800001
        \\  }
        \\  {
        \\   r1:0 = convert_sf2df(r2)
        \\   jumpr r31
        \\  }
    );
}