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