nkeynes@185: # nkeynes@185: # Assembler functions to invoke the non-standard FP operations nkeynes@185: # nkeynes@185: .global _clear_fpscr nkeynes@185: _clear_fpscr: nkeynes@185: xor r0, r0 nkeynes@185: lds r0, fpscr nkeynes@185: rts nkeynes@185: nop nkeynes@185: nkeynes@185: .global _get_fpscr nkeynes@185: _get_fpscr: nkeynes@185: rts nkeynes@185: sts fpscr, r0 nkeynes@185: nkeynes@185: .global _set_fpscr nkeynes@185: _set_fpscr: nkeynes@185: rts nkeynes@185: lds r4, fpscr nkeynes@185: nkeynes@185: .global _do_fsca nkeynes@185: _do_fsca: nkeynes@185: sts fpscr, r0 nkeynes@185: mov #0x08, r1 nkeynes@185: shll16 r1 nkeynes@185: not r1, r1 nkeynes@185: and r0, r1 nkeynes@185: lds r1, fpscr nkeynes@185: lds r4, fpul nkeynes@185: .word 0xF0FD nkeynes@185: fmov fr0, @r5 nkeynes@185: fmov fr1, @r6 nkeynes@185: xor r0,r0 nkeynes@185: rts nkeynes@185: lds r1, fpscr nkeynes@185: nkeynes@185: .global _do_fsrra nkeynes@185: _do_fsrra: nkeynes@185: sts fpscr, r0 nkeynes@185: mov #0x08, r1 nkeynes@185: shll16 r1 nkeynes@185: not r1, r1 nkeynes@185: and r0, r1 nkeynes@185: lds r1, fpscr nkeynes@185: fmov fr4, fr0 nkeynes@185: .word 0xF07D nkeynes@185: rts nkeynes@185: lds r0, fpscr nkeynes@185: nkeynes@185: .global _do_fipr nkeynes@185: _do_fipr: nkeynes@185: sts fpscr, r0 nkeynes@185: mov #0x08, r1 nkeynes@185: shll16 r1 nkeynes@185: not r1, r1 nkeynes@185: and r0, r1 nkeynes@185: lds r1, fpscr nkeynes@185: fmov.s @r4+, fr0 nkeynes@185: fmov.s @r4+, fr1 nkeynes@185: fmov.s @r4+, fr2 nkeynes@185: fmov.s @r4+, fr3 nkeynes@185: fmov.s @r5+, fr4 nkeynes@185: fmov.s @r5+, fr5 nkeynes@185: fmov.s @r5+, fr6 nkeynes@185: fmov.s @r5+, fr7 nkeynes@185: fipr fv0, fv4 nkeynes@185: lds r0, fpscr nkeynes@185: rts nkeynes@185: fmov fr7, fr0 nkeynes@185: nkeynes@185: .global _do_fipr2 nkeynes@185: _do_fipr2: nkeynes@185: sts fpscr, r0 nkeynes@185: mov #0x08, r1 nkeynes@185: shll16 r1 nkeynes@185: not r1, r1 nkeynes@185: and r0, r1 nkeynes@185: lds r1, fpscr nkeynes@185: fschg nkeynes@185: fmov @r4+, dr0 nkeynes@185: fmov @r4+, dr2 nkeynes@185: fmov @r5+, dr4 nkeynes@185: fmov @r5+, dr6 nkeynes@185: fschg nkeynes@185: fipr fv0, fv4 nkeynes@185: lds r0, fpscr nkeynes@185: rts nkeynes@185: fmov fr7, fr0 nkeynes@185: nkeynes@185: .global _do_ftrv nkeynes@185: _do_ftrv: nkeynes@185: sts fpscr, r0 nkeynes@185: mov #0x08, r1 nkeynes@185: shll16 r1 nkeynes@185: not r1, r1 nkeynes@185: and r0, r1 nkeynes@185: lds r1, fpscr nkeynes@185: fschg nkeynes@185: fmov @r4+, xd0 nkeynes@185: fmov @r4+, xd2 nkeynes@185: fmov @r4+, xd4 nkeynes@185: fmov @r4+, xd6 nkeynes@185: fmov @r4+, xd8 nkeynes@185: fmov @r4+, xd10 nkeynes@185: fmov @r4+, xd12 nkeynes@185: fmov @r4, xd14 nkeynes@185: fmov @r5+, dr0 nkeynes@185: fmov @r5, dr2 nkeynes@185: ftrv xmtrx, fv0 nkeynes@185: fmov dr2, @r5 nkeynes@185: fmov dr0, @-r5 nkeynes@185: fschg nkeynes@185: rts nkeynes@185: lds r0, fpscr nkeynes@185: nkeynes@185: .global _do_ftrv2 nkeynes@185: _do_ftrv2: nkeynes@185: sts fpscr, r0 nkeynes@185: mov #0x08, r1 nkeynes@185: shll16 r1 nkeynes@185: not r1, r1 nkeynes@185: and r0, r1 nkeynes@185: lds r1, fpscr nkeynes@185: fschg nkeynes@185: frchg nkeynes@185: fmov @r4+, dr0 nkeynes@185: fmov @r4+, dr2 nkeynes@185: fmov @r4+, dr4 nkeynes@185: fmov @r4+, dr6 nkeynes@185: fmov @r4+, dr8 nkeynes@185: fmov @r4+, dr10 nkeynes@185: fmov @r4+, dr12 nkeynes@185: fmov @r4+, dr14 nkeynes@185: frchg nkeynes@185: fmov @r5+, dr0 nkeynes@185: fmov @r5, dr2 nkeynes@185: ftrv xmtrx, fv0 nkeynes@185: fmov dr2, @-r5 nkeynes@185: fmov dr0, @-r5 nkeynes@185: fschg nkeynes@185: rts nkeynes@185: lds r0, fpscr