Updated dot product sample application.
This commit is contained in:
@@ -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
|
sieve.4b.bin : boot.4b.HOF lib.4b.HOF sieve.4b.HOF
|
||||||
$(HARPLD) --arch $(4BARCH) -o $@ $^
|
$(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 $@ $^
|
$(HARPLD) --arch $(4BARCH) -o $@ $^
|
||||||
|
|
||||||
%.4b.bin : %.4b.HOF
|
%.4b.bin : %.4b.HOF
|
||||||
|
|||||||
@@ -14,34 +14,36 @@
|
|||||||
.global
|
.global
|
||||||
entry: ldi %r0, array_a;
|
entry: ldi %r0, array_a;
|
||||||
ldi %r1, array_b;
|
ldi %r1, array_b;
|
||||||
ldi %r2, #1;
|
ldi %r2, #10;
|
||||||
jali %r5, dotprod
|
jali %r5, dotprod
|
||||||
|
|
||||||
ori %r7, %r0, #0;
|
ori %r7, %r0, #0;
|
||||||
jali %r5, printhex;
|
jali %r5, printfloat;
|
||||||
|
|
||||||
trap;
|
trap;
|
||||||
|
|
||||||
/* Return in r0 dot product of vectors of real values pointed to by r0 and r1,
|
/* Return in r0 dot product of vectors of real values pointed to by r0 and r1,
|
||||||
length in r2 */
|
length in r2 */
|
||||||
dotprod: ldi %r3, #0;
|
dotprod: ldi %r3, #0;
|
||||||
|
st %r5, %r3, retaddr;
|
||||||
dploop: ld %r4, %r0, #0;
|
dploop: ld %r4, %r0, #0;
|
||||||
ld %r6, %r1, #0;
|
ld %r6, %r1, #0;
|
||||||
subi %r2, %r2, #1;
|
subi %r2, %r2, #1;
|
||||||
addi %r0, %r0, __WORD;
|
addi %r0, %r0, __WORD;
|
||||||
addi %r1, %r1, __WORD;
|
addi %r1, %r1, __WORD;
|
||||||
rtop @p0, %r2;
|
rtop @p0, %r2;
|
||||||
fadd %r4, %r4, %r6;
|
fmul %r4, %r4, %r6;
|
||||||
fadd %r3, %r3, %r4;
|
fadd %r3, %r3, %r4;
|
||||||
@p0 ? jmpi dploop;
|
@p0 ? jmpi dploop;
|
||||||
ori %r0, %r3, #0;
|
ori %r0, %r3, #0;
|
||||||
|
ldi %r3, retaddr;
|
||||||
|
ld %r5, %r3, #0;
|
||||||
jmpr %r5;
|
jmpr %r5;
|
||||||
|
|
||||||
|
.align 4096
|
||||||
.perm rw
|
.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_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
|
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
|
||||||
.global
|
|
||||||
array: .space 0x1000 /* SIZE words of space. */
|
|
||||||
|
|
||||||
|
|||||||
@@ -19,14 +19,48 @@ printhex_l1: subi %r8, %r8, #4;
|
|||||||
isneg @p0, %r10;
|
isneg @p0, %r10;
|
||||||
notp @p1, @p0;
|
notp @p1, @p0;
|
||||||
@p0 ? addi %r9, %r9, #0x30
|
@p0 ? addi %r9, %r9, #0x30
|
||||||
@p1 ? addi %r9, %r10, #0x61
|
@p1 ? addi %r9, %r10, #0x60
|
||||||
rtop @p0, %r8;
|
rtop @p0, %r8;
|
||||||
st %r9, %r11, #0;
|
st %r9, %r11, #0;
|
||||||
@p0 ? jmpi printhex_l1;
|
@p0 ? jmpi printhex_l1;
|
||||||
|
ldi %r9, #0x0a;
|
||||||
|
st %r9, %r11, #0;
|
||||||
jmpr %r5;
|
jmpr %r5;
|
||||||
|
|
||||||
.global
|
.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);
|
shli %r8, %r8, (__WORD*8 - 1);
|
||||||
and %r6, %r8, %r7;
|
and %r6, %r8, %r7;
|
||||||
rtop @p0, %r6;
|
rtop @p0, %r6;
|
||||||
@@ -46,10 +80,16 @@ printdec_l2: subi %r9, %r9, __WORD;
|
|||||||
st %r6, %r8, #0;
|
st %r6, %r8, #0;
|
||||||
rtop @p0, %r9;
|
rtop @p0, %r9;
|
||||||
@p0 ? jmpi printdec_l2;
|
@p0 ? jmpi printdec_l2;
|
||||||
ldi %r6, #0x0a;
|
|
||||||
st %r6, %r8, #0;
|
|
||||||
jmpr %r5
|
jmpr %r5
|
||||||
|
|
||||||
|
.global
|
||||||
|
printdec: ori %r10, %r5, #0;
|
||||||
|
jali %r5, printdecint;
|
||||||
|
ldi %r6, #0x0a;
|
||||||
|
st %r6, %r8, #0;
|
||||||
|
jmpr %r10;
|
||||||
|
|
||||||
.global
|
.global
|
||||||
puts: ldi %r8, #1;
|
puts: ldi %r8, #1;
|
||||||
shli %r8, %r8, (__WORD*8 - 1);
|
shli %r8, %r8, (__WORD*8 - 1);
|
||||||
|
|||||||
Reference in New Issue
Block a user