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