summaryrefslogtreecommitdiff
path: root/src/libultra/mgu/scale.s
blob: e0a9644595c0debdbb24597a41f1d3aeb937c654 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#include "PR/asm.h"
#include "PR/regdef.h"

.text
.align 5

LEAF(guScale)
    li.s    ft0, 65536.0

    mtc1    a1, ft1
    mul.s   ft2, ft1, ft0
    trunc.w.s ft3, ft2
    mfc1    t1, ft3

    srl     t2, t1, 0x10
    sll     t0, t2, 0x10
    sw      t0, 0x00(a0)
    sll     t2, t1, 0x10
    sw      t2, 0x20(a0)

    mtc1    a2, ft1
    mul.s   ft2, ft1, ft0
    trunc.w.s ft3, ft2
    mfc1    t1, ft3

    srl     t0, t1, 0x10
    sw      t0, 0x08(a0)
    and     t2, t1, 0xFFFF
    sw      t2, 0x28(a0)

    mtc1    a3, ft1
    mul.s   ft2, ft1, ft0
    trunc.w.s ft3, ft2
    mfc1    t1, ft3

    srl     t2, t1, 0x10
    sll     t0, t2, 0x10
    sw      t0, 0x14(a0)
    sll     t2, t1, 0x10
    sw      t2, 0x34(a0)

    li      t0, 1
    sw      t0, 0x1C(a0)

    sw      zero, 0x04(a0)
    sw      zero, 0x0C(a0)
    sw      zero, 0x10(a0)
    sw      zero, 0x18(a0)
    sw      zero, 0x24(a0)
    sw      zero, 0x2C(a0)
    sw      zero, 0x30(a0)
    sw      zero, 0x38(a0)
    sw      zero, 0x3C(a0)

    jr      ra
END(guScale)