Example program#
Example program:
from copapy import value
from copapy.backend import Store, compile_to_dag, stencil_db_from_package
from copapy._binwrite import Command
input = value(9.0)
result = input ** 2 / 3.3 + 5
arch = 'native'
sdb = stencil_db_from_package(arch)
dw, _ = compile_to_dag([Store(result)], sdb)
# Instruct runner to dump patched code to a file:
dw.write_com(Command.DUMP_CODE)
dw.to_file('build/runner/test.copapy')
arm64#
build/runner/test.copapy.bin: file format binary
Disassembly of section .data:
0000000000010000 <.data>:
10000: a9bf7bfd stp x29, x30, [sp, #-16]!
10004: 52800000 mov w0, #0x0 // #0
10008: 910003fd mov x29, sp
1000c: b0000002 adrp x2, 0x11000
10010: 2a0103e0 mov w0, w1
10014: bd400440 ldr s0, [x2, #4]
10018: 1e200800 fmul s0, s0, s0
1001c: b0000000 adrp x0, 0x11000
10020: bd400c01 ldr s1, [x0, #12]
10024: 1e211800 fdiv s0, s0, s1
10028: b0000000 adrp x0, 0x11000
1002c: bd400801 ldr s1, [x0, #8]
10030: 1e212800 fadd s0, s0, s1
10034: b0000000 adrp x0, 0x11000
10038: bd000000 str s0, [x0]
1003c: 52800020 mov w0, #0x1 // #1
10040: a8c17bfd ldp x29, x30, [sp], #16
10044: d65f03c0 ret
armv6#
build/runner/test.copapy.bin: file format binary
Disassembly of section .data:
00010000 <.data>:
10000: e3a00000 mov r0, #0
10004: e92d4010 push {r4, lr}
10008: e59f3008 ldr r3, [pc, #8] @ 0x10018
1000c: e1a00001 mov r0, r1
10010: ed930a00 vldr s0, [r3]
10014: ea000000 b 0x1001c
10018: f2141008 vhadd.s16 d1, d4, d8
1001c: ee200a00 vmul.f32 s0, s0, s0
10020: e59f3004 ldr r3, [pc, #4] @ 0x1002c
10024: edd30a00 vldr s1, [r3]
10028: ea000000 b 0x10030
1002c: f2141004 vhadd.s16 d1, d4, d4
10030: ee800a20 vdiv.f32 s0, s0, s1
10034: e59f3004 ldr r3, [pc, #4] @ 0x10040
10038: edd30a00 vldr s1, [r3]
1003c: ea000000 b 0x10044
10040: f2141000 vhadd.s16 d1, d4, d0
10044: ee300a20 vadd.f32 s0, s0, s1
10048: e59f3004 ldr r3, [pc, #4] @ 0x10054
1004c: ed830a00 vstr s0, [r3]
10050: ea000000 b 0x10058
10054: f214100c vhadd.s16 d1, d4, d12
10058: e3a00001 mov r0, #1
1005c: e8bd8010 pop {r4, pc}
armv7#
build/runner/test.copapy.bin: file format binary
Disassembly of section .data:
00010000 <.data>:
10000: e3a00000 mov r0, #0
10004: e92d4010 push {r4, lr}
10008: e3003000 movw r3, #0
1000c: e34f3595 movt r3, #62869 @ 0xf595
10010: e1a00001 mov r0, r1
10014: ed930a00 vldr s0, [r3]
10018: ee200a00 vmul.f32 s0, s0, s0
1001c: e3003008 movw r3, #8
10020: e34f3595 movt r3, #62869 @ 0xf595
10024: edd30a00 vldr s1, [r3]
10028: ee800a20 vdiv.f32 s0, s0, s1
1002c: e300300c movw r3, #12
10030: e34f3595 movt r3, #62869 @ 0xf595
10034: edd30a00 vldr s1, [r3]
10038: ee300a20 vadd.f32 s0, s0, s1
1003c: e3003004 movw r3, #4
10040: e34f3595 movt r3, #62869 @ 0xf595
10044: ed830a00 vstr s0, [r3]
10048: e3a00001 mov r0, #1
1004c: e8bd8010 pop {r4, pc}
armv7mthumb#
build/runner/test.copapy.bin: file format binary
Disassembly of section .data:
00010000 <.data>:
10000: b508 push {r3, lr}
10002: 2000 movs r0, #0
10004: 4b02 ldr r3, [pc, #8] @ (0x10010)
10006: 4608 mov r0, r1
10008: ed93 0a00 vldr s0, [r3]
1000c: f000 b802 b.w 0x10014
10010: 7000 strb r0, [r0, #0]
10012: eba1 ee20 @ <UNDEFINED> instruction: 0xeba1ee20
10016: 0a00 lsrs r0, r0, #8
10018: 4b02 ldr r3, [pc, #8] @ (0x10024)
1001a: edd3 0a00 vldr s1, [r3]
1001e: f000 b803 b.w 0x10028
10022: bf00 nop
10024: 7008 strb r0, [r1, #0]
10026: eba1 ee80 @ <UNDEFINED> instruction: 0xeba1ee80
1002a: 0a20 lsrs r0, r4, #8
1002c: 4b02 ldr r3, [pc, #8] @ (0x10038)
1002e: edd3 0a00 vldr s1, [r3]
10032: f000 b803 b.w 0x1003c
10036: bf00 nop
10038: 7004 strb r4, [r0, #0]
1003a: eba1 ee30 @ <UNDEFINED> instruction: 0xeba1ee30
1003e: 0a20 lsrs r0, r4, #8
10040: 4b02 ldr r3, [pc, #8] @ (0x1004c)
10042: ed83 0a00 vstr s0, [r3]
10046: f000 b803 b.w 0x10050
1004a: bf00 nop
1004c: 700c strb r4, [r1, #0]
1004e: eba1 2001 sub.w r0, r1, r1, lsl #8
10052: bd08 pop {r3, pc}
armv7mthumb_fpv5#
build/runner/test.copapy.bin: file format binary
Disassembly of section .data:
00010000 <.data>:
10000: 2000 movs r0, #0
10002: b508 push {r3, lr}
10004: 4b02 ldr r3, [pc, #8] @ (0x10010)
10006: 4608 mov r0, r1
10008: ed93 0a00 vldr s0, [r3]
1000c: f000 b802 b.w 0x10014
10010: 9000 str r0, [sp, #0]
10012: ef5a ee20 vceq.f16 d30, d10, d16
10016: 0a00 lsrs r0, r0, #8
10018: 4b02 ldr r3, [pc, #8] @ (0x10024)
1001a: edd3 0a00 vldr s1, [r3]
1001e: f000 b803 b.w 0x10028
10022: bf00 nop
10024: 9008 str r0, [sp, #32]
10026: ef5a ee80 vceq.f16 d30, d26, d0
1002a: 0a20 lsrs r0, r4, #8
1002c: 4b02 ldr r3, [pc, #8] @ (0x10038)
1002e: edd3 0a00 vldr s1, [r3]
10032: f000 b803 b.w 0x1003c
10036: bf00 nop
10038: 9004 str r0, [sp, #16]
1003a: ef5a ee30 @ <UNDEFINED> instruction: 0xef5aee30
1003e: 0a20 lsrs r0, r4, #8
10040: 4b02 ldr r3, [pc, #8] @ (0x1004c)
10042: ed83 0a00 vstr s0, [r3]
10046: f000 b803 b.w 0x10050
1004a: bf00 nop
1004c: 900c str r0, [sp, #48] @ 0x30
1004e: ef5a 2001 vhadd.s16 d18, d10, d1
10052: bd08 pop {r3, pc}
armv7thumb#
build/runner/test.copapy.bin: file format binary
Disassembly of section .data:
00010000 <.data>:
10000: b508 push {r3, lr}
10002: 2000 movs r0, #0
10004: f24b 0300 movw r3, #45056 @ 0xb000
10008: f2cf 63c8 movt r3, #63176 @ 0xf6c8
1000c: 4608 mov r0, r1
1000e: ed93 0a00 vldr s0, [r3]
10012: bf00 nop
10014: ee20 0a00 vmul.f32 s0, s0, s0
10018: f24b 030c movw r3, #45068 @ 0xb00c
1001c: f2cf 63c8 movt r3, #63176 @ 0xf6c8
10020: edd3 0a00 vldr s1, [r3]
10024: ee80 0a20 vdiv.f32 s0, s0, s1
10028: f24b 0308 movw r3, #45064 @ 0xb008
1002c: f2cf 63c8 movt r3, #63176 @ 0xf6c8
10030: edd3 0a00 vldr s1, [r3]
10034: ee30 0a20 vadd.f32 s0, s0, s1
10038: f24b 0304 movw r3, #45060 @ 0xb004
1003c: f2cf 63c8 movt r3, #63176 @ 0xf6c8
10040: ed83 0a00 vstr s0, [r3]
10044: 2001 movs r0, #1
10046: bd08 pop {r3, pc}
armv81mthumb#
build/runner/test.copapy.bin: file format binary
Disassembly of section .data:
00010000 <.data>:
10000: b508 push {r3, lr}
10002: 2000 movs r0, #0
10004: 4b02 ldr r3, [pc, #8] @ (0x10010)
10006: 4608 mov r0, r1
10008: ed93 0a00 vldr s0, [r3]
1000c: f000 b802 b.w 0x10014
10010: 100c asrs r4, r1, #32
10012: 4100 asrs r0, r0
10014: ee20 0a00 vmul.f32 s0, s0, s0
10018: 4b02 ldr r3, [pc, #8] @ (0x10024)
1001a: edd3 0a00 vldr s1, [r3]
1001e: f000 b803 b.w 0x10028
10022: bf00 nop
10024: 1000 asrs r0, r0, #32
10026: 4100 asrs r0, r0
10028: ee80 0a20 vdiv.f32 s0, s0, s1
1002c: 4b02 ldr r3, [pc, #8] @ (0x10038)
1002e: edd3 0a00 vldr s1, [r3]
10032: f000 b803 b.w 0x1003c
10036: bf00 nop
10038: 1004 asrs r4, r0, #32
1003a: 4100 asrs r0, r0
1003c: ee30 0a20 vadd.f32 s0, s0, s1
10040: 4a02 ldr r2, [pc, #8] @ (0x1004c)
10042: ed82 0a00 vstr s0, [r2]
10046: f000 b803 b.w 0x10050
1004a: bf00 nop
1004c: 1008 asrs r0, r1, #32
1004e: 4100 asrs r0, r0
10050: 2001 movs r0, #1
10052: bd08 pop {r3, pc}
riscv32#
build/runner/test.copapy.bin: file format binary
Disassembly of section .data:
00010000 <.data>:
10000: 1141 addi sp,sp,-16
10002: 4501 li a0,0
10004: c606 sw ra,12(sp)
10006: ffffe797 auipc a5,0xffffe
1000a: 0027a507 flw fa0,2(a5) # 0xe008
1000e: 852e mv a0,a1
10010: 00000317 auipc t1,0x0
10014: 00830067 jr 8(t1) # 0x10018
10018: 10a57553 fmul.s fa0,fa0,fa0
1001c: 00000317 auipc t1,0x0
10020: 00830067 jr 8(t1) # 0x10024
10024: ffffe797 auipc a5,0xffffe
10028: fdc7a587 flw fa1,-36(a5) # 0xe000
1002c: 00000317 auipc t1,0x0
10030: 00830067 jr 8(t1) # 0x10034
10034: 18b57553 fdiv.s fa0,fa0,fa1
10038: 00000317 auipc t1,0x0
1003c: 00830067 jr 8(t1) # 0x10040
10040: ffffe797 auipc a5,0xffffe
10044: fcc7a587 flw fa1,-52(a5) # 0xe00c
10048: 00000317 auipc t1,0x0
1004c: 00830067 jr 8(t1) # 0x10050
10050: 00b57553 fadd.s fa0,fa0,fa1
10054: 00000317 auipc t1,0x0
10058: 00830067 jr 8(t1) # 0x1005c
1005c: ffffe797 auipc a5,0xffffe
10060: fa878793 addi a5,a5,-88 # 0xe004
10064: e388 fsw fa0,0(a5)
10066: 00000317 auipc t1,0x0
1006a: 00830067 jr 8(t1) # 0x1006e
1006e: 40b2 lw ra,12(sp)
10070: 4505 li a0,1
10072: 0141 addi sp,sp,16
10074: 8082 ret
riscv64#
build/runner/test.copapy.bin: file format binary
Disassembly of section .data:
0000000000010000 <.data>:
10000: 1141 addi sp,sp,-16
10002: 4501 li a0,0
10004: e406 sd ra,8(sp)
10006: 852e mv a0,a1
10008: 00001797 auipc a5,0x1
1000c: ff87a507 flw fa0,-8(a5) # 0x11000
10010: 00000317 auipc t1,0x0
10014: 00830067 jr 8(t1) # 0x10018
10018: 10a57553 fmul.s fa0,fa0,fa0
1001c: 00000317 auipc t1,0x0
10020: 00830067 jr 8(t1) # 0x10024
10024: 00001797 auipc a5,0x1
10028: fe87a587 flw fa1,-24(a5) # 0x1100c
1002c: 00000317 auipc t1,0x0
10030: 00830067 jr 8(t1) # 0x10034
10034: 18b57553 fdiv.s fa0,fa0,fa1
10038: 00000317 auipc t1,0x0
1003c: 00830067 jr 8(t1) # 0x10040
10040: 00001797 auipc a5,0x1
10044: fc87a587 flw fa1,-56(a5) # 0x11008
10048: 00000317 auipc t1,0x0
1004c: 00830067 jr 8(t1) # 0x10050
10050: 00b57553 fadd.s fa0,fa0,fa1
10054: 00000317 auipc t1,0x0
10058: 00830067 jr 8(t1) # 0x1005c
1005c: 00001797 auipc a5,0x1
10060: faa7a427 fsw fa0,-88(a5) # 0x11004
10064: 00000317 auipc t1,0x0
10068: 00830067 jr 8(t1) # 0x1006c
1006c: 60a2 ld ra,8(sp)
1006e: 4505 li a0,1
10070: 0141 addi sp,sp,16
10072: 8082 ret
tricore#
build/runner/test.copapy.bin: file format binary
Disassembly of section .data:
00010000 <.data>:
10000: 82 04 mov %d4,0
10002: 91 40 10 2a movh.a %a2,41220
10006: d9 22 2c b4 lea %a2,[%a2]17132 <0xa10442ec>
1000a: 54 24 ld.w %d4,[%a2]
1000c: 4b 44 41 40 mul.f %d4,%d4,%d4
10010: 91 40 10 2a movh.a %a2,41220
10014: d9 22 24 b4 lea %a2,[%a2]17124 <0xa10442e4>
10018: 54 25 ld.w %d5,[%a2]
1001a: 4b 54 51 40 div.f %d4,%d4,%d5
1001e: 91 40 10 2a movh.a %a2,41220
10022: d9 22 20 b4 lea %a2,[%a2]17120 <0xa10442e0>
10026: 54 25 ld.w %d5,[%a2]
10028: 6b 05 21 44 add.f %d4,%d4,%d5
1002c: 91 40 10 2a movh.a %a2,41220
10030: d9 22 28 b4 lea %a2,[%a2]17128 <0xa10442e8>
10034: 74 24 st.w [%a2],%d4
10036: 82 12 mov %d2,1
10038: 00 90 ret
x86#
build/runner/test.copapy.bin: file format binary
Disassembly of section .data:
00010000 <.data>:
10000: 83 ec 18 sub $0x18,%esp
10003: 6a 00 push $0x0
10005: d9 05 04 e0 af f5 flds 0xf5afe004
1000b: d9 5c 24 04 fstps 0x4(%esp)
1000f: d9 44 24 04 flds 0x4(%esp)
10013: d8 c8 fmul %st(0),%st
10015: d9 5c 24 04 fstps 0x4(%esp)
10019: d9 05 00 e0 af f5 flds 0xf5afe000
1001f: d9 5c 24 08 fstps 0x8(%esp)
10023: d9 44 24 08 flds 0x8(%esp)
10027: d8 7c 24 04 fdivrs 0x4(%esp)
1002b: d9 5c 24 04 fstps 0x4(%esp)
1002f: d9 05 0c e0 af f5 flds 0xf5afe00c
10035: d9 5c 24 08 fstps 0x8(%esp)
10039: d9 44 24 08 flds 0x8(%esp)
1003d: d8 44 24 04 fadds 0x4(%esp)
10041: d9 5c 24 04 fstps 0x4(%esp)
10045: d9 44 24 04 flds 0x4(%esp)
10049: d9 15 08 e0 af f5 fsts 0xf5afe008
1004f: d9 5c 24 04 fstps 0x4(%esp)
10053: b8 01 00 00 00 mov $0x1,%eax
10058: 83 c4 1c add $0x1c,%esp
1005b: c3 ret
x86_64#
build/runner/test.copapy.bin: file format binary
Disassembly of section .data:
0000000000010000 <.data>:
10000: 48 83 ec 08 sub $0x8,%rsp
10004: 31 ff xor %edi,%edi
10006: f3 0f 10 05 f2 0f 00 movss 0xff2(%rip),%xmm0 # 0x11000
1000d: 00
1000e: 89 f7 mov %esi,%edi
10010: f3 0f 59 c0 mulss %xmm0,%xmm0
10014: f3 0f 10 0d f0 0f 00 movss 0xff0(%rip),%xmm1 # 0x1100c
1001b: 00
1001c: f3 0f 5e c1 divss %xmm1,%xmm0
10020: f3 0f 10 0d e0 0f 00 movss 0xfe0(%rip),%xmm1 # 0x11008
10027: 00
10028: f3 0f 58 c1 addss %xmm1,%xmm0
1002c: f3 0f 11 05 d0 0f 00 movss %xmm0,0xfd0(%rip) # 0x11004
10033: 00
10034: b8 01 00 00 00 mov $0x1,%eax
10039: 48 83 c4 08 add $0x8,%rsp
1003d: c3 ret