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: bd400040 ldr s0, [x2]
10018: b0000000 adrp x0, 0x11000
1001c: bd400001 ldr s1, [x0]
10020: 1e210800 fmul s0, s0, s1
10024: b0000000 adrp x0, 0x11000
10028: bd400401 ldr s1, [x0, #4]
1002c: 1e211800 fdiv s0, s0, s1
10030: b0000000 adrp x0, 0x11000
10034: b9400800 ldr w0, [x0, #8]
10038: 1e220001 scvtf s1, w0
1003c: 1e202820 fadd s0, s1, s0
10040: b0000001 adrp x1, 0x11000
10044: bd000c20 str s0, [x1, #12]
10048: 52800020 mov w0, #0x1 // #1
1004c: a8c17bfd ldp x29, x30, [sp], #16
10050: 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: e3023000 movw r3, #8192 @ 0x2000
1000c: e3443100 movt r3, #16640 @ 0x4100
10010: e1a00001 mov r0, r1
10014: ed930a00 vldr s0, [r3]
10018: e3023000 movw r3, #8192 @ 0x2000
1001c: e3443100 movt r3, #16640 @ 0x4100
10020: edd30a00 vldr s1, [r3]
10024: ee200a20 vmul.f32 s0, s0, s1
10028: e3023004 movw r3, #8196 @ 0x2004
1002c: e3443100 movt r3, #16640 @ 0x4100
10030: edd30a00 vldr s1, [r3]
10034: ee800a20 vdiv.f32 s0, s0, s1
10038: e3023008 movw r3, #8200 @ 0x2008
1003c: e3443100 movt r3, #16640 @ 0x4100
10040: e5930000 ldr r0, [r3]
10044: ee070a90 vmov s15, r0
10048: eef87ae7 vcvt.f32.s32 s15, s15
1004c: ee370a80 vadd.f32 s0, s15, s0
10050: e302300c movw r3, #8204 @ 0x200c
10054: e3443100 movt r3, #16640 @ 0x4100
10058: ed830a00 vstr s0, [r3]
1005c: e3a00001 mov r0, #1
10060: 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: e3023000 movw r3, #8192 @ 0x2000
1000c: e3443100 movt r3, #16640 @ 0x4100
10010: e1a00001 mov r0, r1
10014: ed930a00 vldr s0, [r3]
10018: e3023000 movw r3, #8192 @ 0x2000
1001c: e3443100 movt r3, #16640 @ 0x4100
10020: edd30a00 vldr s1, [r3]
10024: ee200a20 vmul.f32 s0, s0, s1
10028: e302300c movw r3, #8204 @ 0x200c
1002c: e3443100 movt r3, #16640 @ 0x4100
10030: edd30a00 vldr s1, [r3]
10034: ee800a20 vdiv.f32 s0, s0, s1
10038: e3023004 movw r3, #8196 @ 0x2004
1003c: e3443100 movt r3, #16640 @ 0x4100
10040: e5930000 ldr r0, [r3]
10044: ee070a90 vmov s15, r0
10048: eef87ae7 vcvt.f32.s32 s15, s15
1004c: ee370a80 vadd.f32 s0, s15, s0
10050: e3023008 movw r3, #8200 @ 0x2008
10054: e3443100 movt r3, #16640 @ 0x4100
10058: ed830a00 vstr s0, [r3]
1005c: e3a00001 mov r0, #1
10060: 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: 2000 movs r0, #0
10012: 4100 asrs r0, r0
10014: 4b02 ldr r3, [pc, #8] @ (0x10020)
10016: edd3 0a00 vldr s1, [r3]
1001a: f000 b803 b.w 0x10024
1001e: bf00 nop
10020: 2000 movs r0, #0
10022: 4100 asrs r0, r0
10024: ee20 0a20 vmul.f32 s0, s0, s1
10028: 4b02 ldr r3, [pc, #8] @ (0x10034)
1002a: edd3 0a00 vldr s1, [r3]
1002e: f000 b803 b.w 0x10038
10032: bf00 nop
10034: 2008 movs r0, #8
10036: 4100 asrs r0, r0
10038: ee80 0a20 vdiv.f32 s0, s0, s1
1003c: 4b01 ldr r3, [pc, #4] @ (0x10044)
1003e: 6818 ldr r0, [r3, #0]
10040: f000 b802 b.w 0x10048
10044: 200c movs r0, #12
10046: 4100 asrs r0, r0
10048: ee07 0a90 vmov s15, r0
1004c: eef8 7ae7 vcvt.f32.s32 s15, s15
10050: ee37 0a80 vadd.f32 s0, s15, s0
10054: 4b02 ldr r3, [pc, #8] @ (0x10060)
10056: ed83 0a00 vstr s0, [r3]
1005a: f000 b803 b.w 0x10064
1005e: bf00 nop
10060: 2004 movs r0, #4
10062: 4100 asrs r0, r0
10064: 2001 movs r0, #1
10066: 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: f242 0308 movw r3, #8200 @ 0x2008
10008: f2c4 1300 movt r3, #16640 @ 0x4100
1000c: 4608 mov r0, r1
1000e: ed93 0a00 vldr s0, [r3]
10012: f000 b801 b.w 0x10018
10016: bf00 nop
10018: f242 0308 movw r3, #8200 @ 0x2008
1001c: f2c4 1300 movt r3, #16640 @ 0x4100
10020: edd3 0a00 vldr s1, [r3]
10024: ee20 0a20 vmul.f32 s0, s0, s1
10028: f242 0304 movw r3, #8196 @ 0x2004
1002c: f2c4 1300 movt r3, #16640 @ 0x4100
10030: edd3 0a00 vldr s1, [r3]
10034: ee80 0a20 vdiv.f32 s0, s0, s1
10038: f242 0300 movw r3, #8192 @ 0x2000
1003c: f2c4 1300 movt r3, #16640 @ 0x4100
10040: 6818 ldr r0, [r3, #0]
10042: f000 b801 b.w 0x10048
10046: bf00 nop
10048: ee07 0a90 vmov s15, r0
1004c: eef8 7ae7 vcvt.f32.s32 s15, s15
10050: ee37 0a80 vadd.f32 s0, s15, s0
10054: f242 030c movw r3, #8204 @ 0x200c
10058: f2c4 1300 movt r3, #16640 @ 0x4100
1005c: ed83 0a00 vstr s0, [r3]
10060: 2001 movs r0, #1
10062: bd08 pop {r3, pc}
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 f6 0f 00 movss 0xff6(%rip),%xmm0 # 0x11004
1000d: 00
1000e: 89 f7 mov %esi,%edi
10010: f3 0f 10 0d ec 0f 00 movss 0xfec(%rip),%xmm1 # 0x11004
10017: 00
10018: f3 0f 59 c1 mulss %xmm1,%xmm0
1001c: f3 0f 10 0d e8 0f 00 movss 0xfe8(%rip),%xmm1 # 0x1100c
10023: 00
10024: f3 0f 5e c1 divss %xmm1,%xmm0
10028: 8b 3d d2 0f 00 00 mov 0xfd2(%rip),%edi # 0x11000
1002e: 0f 28 c8 movaps %xmm0,%xmm1
10031: 66 0f ef c0 pxor %xmm0,%xmm0
10035: f3 0f 2a c7 cvtsi2ss %edi,%xmm0
10039: f3 0f 58 c1 addss %xmm1,%xmm0
1003d: f3 0f 11 05 c3 0f 00 movss %xmm0,0xfc3(%rip) # 0x11008
10044: 00
10045: b8 01 00 00 00 mov $0x1,%eax
1004a: 48 83 c4 08 add $0x8,%rsp
1004e: c3 ret