.data .globl RADIUS .p2align 2 RADIUS: .word 1085276160 .globl PI .p2align 2 PI: .word 1078530011 .globl EPS .p2align 2 EPS: .word 897988541 .globl PI_HEX .p2align 2 PI_HEX: .word 1078530011 .globl HEX2 .p2align 2 HEX2: .word 1033895936 .globl FACT .p2align 2 FACT: .word -956241920 .globl EVAL1 .p2align 2 EVAL1: .word 1119752446 .globl EVAL2 .p2align 2 EVAL2: .word 1107966695 .globl EVAL3 .p2align 2 EVAL3: .word 1107966695 .globl CONV1 .p2align 2 CONV1: .word 1130954752 .globl CONV2 .p2align 2 CONV2: .word 1166012416 .globl MAX .p2align 2 MAX: .word 1000000000 .globl TWO .p2align 2 TWO: .word 2 .globl THREE .p2align 2 THREE: .word 3 .globl FIVE .p2align 2 FIVE: .word 5 .text .globl float_abs .p2align 2 float_abs: .L.float_abs.0: stp x29, x30, [sp, #-16]! mov x29, sp fmov s8, s0 mov w8, #0 fmov s9, w8 fcmp s8, s9 b.lt .L.float_abs.1 b .L.float_abs.2 .L.float_abs.1: mov w8, #0 fmov s9, w8 fsub s8, s9, s8 fmov s0, s8 ldp x29, x30, [sp], #16 ret .L.float_abs.2: fmov s0, s8 ldp x29, x30, [sp], #16 ret .text .globl circle_area .p2align 2 circle_area: .L.circle_area.0: stp x29, x30, [sp, #-16]! mov x29, sp mov w8, w0 adrp x13, PI ldr s8, [x13, #:lo12:PI] scvtf s9, w8 fmul s8, s8, s9 scvtf s9, w8 fmul s8, s8, s9 mul w8, w8, w8 adrp x13, PI ldr s9, [x13, #:lo12:PI] scvtf s10, w8 fmul s9, s10, s9 fadd s8, s8, s9 movz w8, #0 movk w8, #16384, lsl #16 fmov s9, w8 fdiv s8, s8, s9 fmov s0, s8 ldp x29, x30, [sp], #16 ret .text .globl float_eq .p2align 2 float_eq: .L.float_eq.0: stp x29, x30, [sp, #-16]! mov x29, sp fmov s8, s0 fmov s9, s1 fsub s8, s8, s9 fmov s0, s8 bl float_abs fmov s8, s0 adrp x13, EPS ldr s9, [x13, #:lo12:EPS] fcmp s8, s9 b.lt .L.float_eq.1 b .L.float_eq.2 .L.float_eq.1: mov w8, #1 mov w0, w8 ldp x29, x30, [sp], #16 ret .L.float_eq.2: mov w8, #0 mov w0, w8 ldp x29, x30, [sp], #16 ret .text .globl error .p2align 2 error: .L.error.0: stp x29, x30, [sp, #-16]! mov x29, sp sub sp, sp, #32 str x19, [sp, #0] mov w8, #101 mov w0, w8 bl putch mov w19, #114 mov w0, w19 bl putch mov w0, w19 bl putch mov w8, #111 mov w0, w8 bl putch mov w0, w19 bl putch mov w8, #10 mov w0, w8 bl putch ldr x19, [sp, #0] add sp, sp, #32 ldp x29, x30, [sp], #16 ret .text .globl ok .p2align 2 ok: .L.ok.0: stp x29, x30, [sp, #-16]! mov x29, sp mov w8, #111 mov w0, w8 bl putch mov w8, #107 mov w0, w8 bl putch mov w8, #10 mov w0, w8 bl putch ldp x29, x30, [sp], #16 ret .text .globl assert .p2align 2 assert: .L.assert.0: stp x29, x30, [sp, #-16]! mov x29, sp mov w8, w0 mov w9, #0 cmp w8, w9 b.eq .L.assert.1 b .L.assert.2 .L.assert.1: bl error b .L.assert.3 .L.assert.2: bl ok b .L.assert.3 .L.assert.3: ldp x29, x30, [sp], #16 ret .text .globl assert_not .p2align 2 assert_not: .L.assert_not.0: stp x29, x30, [sp, #-16]! mov x29, sp mov w8, w0 mov w9, #0 cmp w8, w9 b.ne .L.assert_not.1 b .L.assert_not.2 .L.assert_not.1: bl error b .L.assert_not.3 .L.assert_not.2: bl ok b .L.assert_not.3 .L.assert_not.3: ldp x29, x30, [sp], #16 ret .text .globl main .p2align 2 main: .L.main.0: stp x29, x30, [sp, #-16]! mov x29, sp sub sp, sp, #112 str x21, [sp, #0] str x19, [sp, #8] str x20, [sp, #16] str s16, [sp, #24] str s17, [sp, #28] str s18, [sp, #32] adrp x13, HEX2 ldr s8, [x13, #:lo12:HEX2] adrp x13, FACT ldr s9, [x13, #:lo12:FACT] fmov s0, s8 fmov s1, s9 bl float_eq mov w8, w0 mov w0, w8 bl assert_not adrp x13, EVAL1 ldr s9, [x13, #:lo12:EVAL1] adrp x13, EVAL2 ldr s8, [x13, #:lo12:EVAL2] fmov s0, s9 fmov s1, s8 bl float_eq mov w8, w0 mov w0, w8 bl assert_not adrp x13, EVAL2 ldr s9, [x13, #:lo12:EVAL2] adrp x13, EVAL3 ldr s8, [x13, #:lo12:EVAL3] fmov s0, s9 fmov s1, s8 bl float_eq mov w8, w0 mov w0, w8 bl assert adrp x13, RADIUS ldr s8, [x13, #:lo12:RADIUS] fcvtzs w8, s8 mov w0, w8 bl circle_area fmov s16, s0 mov w8, #5 mov w0, w8 bl circle_area fmov s8, s0 fmov s0, s16 fmov s1, s8 bl float_eq mov w8, w0 mov w0, w8 bl assert adrp x13, CONV1 ldr s8, [x13, #:lo12:CONV1] adrp x13, CONV2 ldr s9, [x13, #:lo12:CONV2] fmov s0, s8 fmov s1, s9 bl float_eq mov w8, w0 mov w0, w8 bl assert_not b .L.main.1 .L.main.1: bl ok b .L.main.2 .L.main.2: b .L.main.3 .L.main.3: bl ok b .L.main.4 .L.main.4: b .L.main.5 .L.main.5: b .L.main.8 .L.main.6: bl ok b .L.main.7 .L.main.7: mov x10, x29 sub x10, x10, #40 movz w8, #0 movk w8, #16256, lsl #16 fmov s8, w8 str s8, [x10] mov x8, #4 add x9, x10, x8 movz w8, #0 movk w8, #16384, lsl #16 fmov s8, w8 str s8, [x9] mov x8, #8 add x8, x10, x8 mov w9, #0 fmov s8, w9 str s8, [x8] mov x8, #12 add x8, x10, x8 str s8, [x8] mov x8, #16 add x8, x10, x8 str s8, [x8] mov x8, #20 add x8, x10, x8 str s8, [x8] mov x8, #24 add x8, x10, x8 str s8, [x8] mov x8, #28 add x8, x10, x8 str s8, [x8] mov x8, #32 add x8, x10, x8 str s8, [x8] mov x8, #36 add x8, x10, x8 str s8, [x8] mov x0, x10 bl getfarray mov w8, w0 mov w19, w8 mov w8, #0 mov w20, w8 mov w8, #1 mov w21, w8 b .L.main.9 .L.main.8: b .L.main.6 .L.main.9: movz w8, #51712 movk w8, #15258, lsl #16 cmp w21, w8 b.lt .L.main.10 b .L.main.11 .L.main.10: bl getfloat fmov s18, s0 adrp x13, PI ldr s8, [x13, #:lo12:PI] fmul s8, s8, s18 fmul s17, s8, s18 fcvtzs w8, s18 mov w0, w8 bl circle_area fmov s16, s0 mov x9, x29 sub x9, x9, #40 sxtw x8, w20 lsl x8, x8, #2 add x8, x9, x8 ldr s8, [x8] fadd s8, s8, s18 sxtw x8, w20 lsl x8, x8, #2 add x8, x9, x8 str s8, [x8] fmov s0, s17 bl putfloat mov w8, #32 mov w0, w8 bl putch fcvtzs w8, s16 mov w0, w8 bl putint mov w8, #10 mov w0, w8 bl putch scvtf s9, w21 movz w8, #0 movk w8, #16672, lsl #16 fmov s8, w8 fmul s8, s9, s8 fcvtzs w8, s8 mov w9, #1 add w9, w20, w9 mov w20, w9 mov w21, w8 b .L.main.9 .L.main.11: mov w0, w19 mov x8, x29 sub x8, x8, #40 mov x1, x8 bl putfarray mov w8, #0 mov w0, w8 ldr x21, [sp, #0] ldr x19, [sp, #8] ldr x20, [sp, #16] ldr s16, [sp, #24] ldr s17, [sp, #28] ldr s18, [sp, #32] add sp, sp, #112 ldp x29, x30, [sp], #16 ret