From 4cea354db87f5408a19573ab338794fc139c03a6 Mon Sep 17 00:00:00 2001 From: cdkersey Date: Mon, 7 Oct 2013 18:00:05 -0400 Subject: [PATCH] Updated dot product sample application. --- src/test/Makefile | 2 +- src/test/dotprod.s | 18 +++++++++-------- src/test/lib.s | 48 ++++++++++++++++++++++++++++++++++++++++++---- 3 files changed, 55 insertions(+), 13 deletions(-) diff --git a/src/test/Makefile b/src/test/Makefile index 8f1a2a59..0b01faf9 100644 --- a/src/test/Makefile +++ b/src/test/Makefile @@ -43,7 +43,7 @@ simple.4b.bin : boot.4b.HOF lib.4b.HOF simple.4b.HOF sieve.4b.bin : boot.4b.HOF lib.4b.HOF sieve.4b.HOF $(HARPLD) --arch $(4BARCH) -o $@ $^ -dotprod.4b.bin : boot.4b.HOF lib.4b.HOF sieve.4b.HOF +dotprod.4b.bin : boot.4b.HOF lib.4b.HOF dotprod.4b.HOF $(HARPLD) --arch $(4BARCH) -o $@ $^ %.4b.bin : %.4b.HOF diff --git a/src/test/dotprod.s b/src/test/dotprod.s index fb87655c..33767807 100644 --- a/src/test/dotprod.s +++ b/src/test/dotprod.s @@ -14,34 +14,36 @@ .global entry: ldi %r0, array_a; ldi %r1, array_b; - ldi %r2, #1; + ldi %r2, #10; jali %r5, dotprod ori %r7, %r0, #0; - jali %r5, printhex; + jali %r5, printfloat; trap; /* Return in r0 dot product of vectors of real values pointed to by r0 and r1, length in r2 */ dotprod: ldi %r3, #0; + st %r5, %r3, retaddr; dploop: ld %r4, %r0, #0; ld %r6, %r1, #0; subi %r2, %r2, #1; addi %r0, %r0, __WORD; addi %r1, %r1, __WORD; rtop @p0, %r2; - fadd %r4, %r4, %r6; + fmul %r4, %r4, %r6; fadd %r3, %r3, %r4; @p0 ? jmpi dploop; ori %r0, %r3, #0; + ldi %r3, retaddr; + ld %r5, %r3, #0; jmpr %r5; +.align 4096 .perm rw - array_a: .word 1.0 2.0 3.0 0.5 1.0 1.5 0.33 0.67 1.0 1.33 -array_b: .word 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0 - -.global -array: .space 0x1000 /* SIZE words of space. */ +array_b: .word 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1f +retaddr: .word 0 + diff --git a/src/test/lib.s b/src/test/lib.s index 11219f81..73a11112 100644 --- a/src/test/lib.s +++ b/src/test/lib.s @@ -19,14 +19,48 @@ printhex_l1: subi %r8, %r8, #4; isneg @p0, %r10; notp @p1, @p0; @p0 ? addi %r9, %r9, #0x30 - @p1 ? addi %r9, %r10, #0x61 + @p1 ? addi %r9, %r10, #0x60 rtop @p0, %r8; st %r9, %r11, #0; @p0 ? jmpi printhex_l1; + ldi %r9, #0x0a; + st %r9, %r11, #0; jmpr %r5; .global -printdec: ldi %r8, #1; +printfloat: ori %r10, %r5, #0; + ori %r11, %r7, #0; + ftoi %r7, %r7; + jali %r5, printdecint; /* Print whole part */ + + ldi %r8, #1; + shli %r8, %r8, (__WORD*8 -1 ); + + /* Print dot */ + ldi %r7, #0x2e; + st %r7, %r8, #0; + + ldi %r7, #10; + itof %r7, %r7; + + ldi %r12, #3 + +pfloop: /* Print next decimal place */ + subi %r12, %r12, #1; + rtop @p0, %r12; + fmul %r11, %r11, %r7; + ftoi %r9, %r11; + modi %r9, %r9, #10; + addi %r9, %r9, #0x30; + st %r9, %r8, #0; + @p0 ? jmpi pfloop; + + ldi %r9, #0x0a; + st %r9, %r8, #0; + + jmpr %r10; + +printdecint: ldi %r8, #1; shli %r8, %r8, (__WORD*8 - 1); and %r6, %r8, %r7; rtop @p0, %r6; @@ -46,10 +80,16 @@ printdec_l2: subi %r9, %r9, __WORD; st %r6, %r8, #0; rtop @p0, %r9; @p0 ? jmpi printdec_l2; - ldi %r6, #0x0a; - st %r6, %r8, #0; + jmpr %r5 +.global +printdec: ori %r10, %r5, #0; + jali %r5, printdecint; + ldi %r6, #0x0a; + st %r6, %r8, #0; + jmpr %r10; + .global puts: ldi %r8, #1; shli %r8, %r8, (__WORD*8 - 1);