Files
vortex/src/test/lib.s

131 lines
3.3 KiB
ArmAsm

/*******************************************************************************
HARPtools by Chad D. Kersey, Summer 2011
********************************************************************************
Sample HARP assmebly programs. These should work on anything from a 4x up.
*******************************************************************************/
/* Library: print decimals and strings! */
.perm x
.global
printhex: ldi %r8, (__WORD * 8);
ldi %r11, #1;
shli %r11, %r11, (__WORD*8 - 1);
printhex_l1: subi %r8, %r8, #4;
shr %r9, %r7, %r8;
andi %r9, %r9, #15;
subi %r10, %r9, #10;
isneg @p0, %r10;
notp @p1, @p0;
@p0 ? addi %r9, %r9, #0x30
@p1 ? addi %r9, %r10, #0x61
rtop @p0, %r8;
st %r9, %r11, #0;
@p0 ? jmpi printhex_l1;
ldi %r9, #0x0a;
st %r9, %r11, #0;
jmpr %r5;
.global
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;
@p0 ? ldi %r6, #0x2d;
@p0 ? st %r6, %r8, #0;
@p0 ? neg %r7, %r7;
ldi %r9, #0;
printdec_l1: modi %r6, %r7, #10;
divi %r7, %r7, #10;
addi %r6, %r6, #0x30;
st %r6, %r9, digstack;
addi %r9, %r9, __WORD;
rtop @p0, %r7;
@p0 ? jmpi printdec_l1;
printdec_l2: subi %r9, %r9, __WORD;
ld %r6, %r9, digstack;
st %r6, %r8, #0;
rtop @p0, %r9;
@p0 ? jmpi printdec_l2;
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);
puts_l: ld %r6, %r7, #0;
andi %r6, %r6, #0xff;
rtop @p0, %r6;
notp @p0, @p0;
@p0 ? jmpi puts_end;
st %r6, %r8, #0;
addi %r7, %r7, #1;
jmpi puts_l;
puts_end: jmpr %r5
.global
rand: ldi %r0, #0;
ld %r0, %r0, rseed;
mul %r0, %r0, %r0;
shri %r0, %r0, #8;
ldi %r9, #0xffff;
and %r0, %r0, %r9;
ldi %r9, #0;
st %r0, %r9, rseed;
jmpr %r5;
.global
randf: ori %r10, %r5, #0;
jali %r5, rand;
ldi %r9, #1;
shli %r9, %r9, #16;
itof %r9, %r9;
itof %r0, %r0;
fdiv %r0, %r0, %r9;
jmpr %r10;
.perm rw
rseed: .word 0xface
digstack: .space 10