cdrom: remove cdrWrite3 reschedule
[pcsx_rearmed.git] / libpcsxcore / ppc / pasm.s
1
2
3 #define OLD_REGISTER_OFFSET     (19*4)
4 #define SP_SIZE                 (OLD_REGISTER_OFFSET+4+8)
5
6 /*asm void recRun(register void (*func)(), register u32 hw1, register u32 hw2)*/
7         .text
8         .align  4
9         .globl  recRun
10 recRun:
11         /* prologue code */
12         mflr    r0
13         stmw    r13, -(32-13)*4(r1)
14         stw             r0, 4(r1)
15         stwu    r1, -((32-13)*4+8)(r1)
16         
17         /* execute code */
18         mtctr   r3
19         mr      r31, r4
20         mr      r30, r5
21         bctrl
22 /*
23 }
24 asm void returnPC()
25 {*/
26         .text
27         .align  4
28         .globl  returnPC
29 returnPC:
30         // end code
31         lwz             r0, (32-13)*4+8+4(r1)
32         addi    r1, r1, (32-13)*4+8
33         mtlr    r0
34         lmw             r13, -(32-13)*4(r1)
35         blr
36 //}*/
37
38 // Memory functions that only works with a linear memory
39
40         .text
41         .align  4
42         .globl  dynMemRead8
43 dynMemRead8:
44 // assumes that memory pointer is in r30
45         addis    r2,r3,-0x1f80
46         srwi.     r4,r2,16
47         bne+     .norm8
48         cmplwi   r2,0x1000
49         blt-     .norm8
50         b        psxHwRead8
51 .norm8:
52         clrlwi   r5,r3,3
53         lbzx     r3,r5,r30
54         blr
55
56         .text
57         .align  4
58         .globl  dynMemRead16
59 dynMemRead16:
60 // assumes that memory pointer is in r30
61         addis    r2,r3,-0x1f80
62         srwi.     r4,r2,16
63         bne+     .norm16
64         cmplwi   r2,0x1000
65         blt-     .norm16
66         b        psxHwRead16
67 .norm16:
68         clrlwi   r5,r3,3
69         lhbrx    r3,r5,r30
70         blr
71
72         .text
73         .align  4
74         .globl  dynMemRead32
75 dynMemRead32:
76 // assumes that memory pointer is in r30
77         addis    r2,r3,-0x1f80
78         srwi.     r4,r2,16
79         bne+     .norm32
80         cmplwi   r2,0x1000
81         blt-     .norm32
82         b        psxHwRead32
83 .norm32:
84         clrlwi   r5,r3,3
85         lwbrx    r3,r5,r30
86         blr
87
88 /*
89         N P Z
90         0 0 0 X
91 -       0 0 1 X
92         1 0 0 X
93         1 0 1 X
94
95 P | (!N & Z)
96 P | !(N | !Z)
97 */
98
99         .text
100         .align  4
101         .globl  dynMemWrite32
102 dynMemWrite32:
103 // assumes that memory pointer is in r30
104         addis    r2,r3,-0x1f80
105         srwi.    r5,r2,16
106         bne+     .normw32
107         cmplwi   r2,0x1000
108         blt      .normw32
109         b        psxHwWrite32
110 .normw32:
111         mtcrf    0xFF, r3
112         clrlwi   r5,r3,3
113         crandc   0, 2, 0
114         cror     2, 1, 0
115         bne+     .okw32
116         // write test
117         li                      r2,0x0130
118         addis    r2,r2,0xfffe
119         cmplw    r3,r2
120         bnelr
121 .okw32:
122         stwbrx   r4,r5,r30
123         blr
124