svp: added few opcodes to translate_op()
[picodrive.git] / Pico / carthw / svp / stub_arm.S
CommitLineData
e807ac75 1@ vim:filetype=armasm
2
3.if 0
4#include "compiler.h"
5.endif
6
7.global tcache
8
9.global flush_inval_caches
10.global regfile_load
11.global regfile_store
12
13@ translation cache buffer
14.text
15.align 12 @ 4096
16.size tcache, TCACHE_SIZE
17tcache:
18 .space TCACHE_SIZE
19
20
21.text
22.align 2
23
24
25flush_inval_caches:
26 mov r2, #0x0 @ must be 0
27 swi 0x9f0002
28 bx lr
29
30
31@ SSP_GR0, SSP_X, SSP_Y, SSP_A,
32@ SSP_ST, SSP_STACK, SSP_PC, SSP_P,
33@ SSP_PM0, SSP_PM1, SSP_PM2, SSP_XST,
34@ SSP_PM4, SSP_gr13, SSP_PMC, SSP_AL
35
36@ register map:
37@ r4: XXYY
38@ r5: A
39@ r6: STACK and emu flags
40@ r7: SSP context
41@ r8: r0-r2
42@ r9: r4-r6
43@ r10: P
44@ r11: cycles
45
46@ trashes r2,r3
47
48regfile_load:
49 ldr r7, =ssp
50 ldr r7, [r7]
51 add r2, r7, #0x400
52 add r2, r2, #4
53 ldmia r2, {r3,r4,r5,r6,r8}
54 mov r3, r3, lsr #16
55 mov r3, r3, lsl #16
56 orr r4, r3, r4, lsr #16 @ XXYY
57 bic r6, r6, #0xff
58 orr r6, r6, r8, lsr #16 @ flags + STACK
59 ldr r8, [r7, #0x440] @ r0-r2
60 ldr r9, [r7, #0x444] @ r4-r6
61 ldr r10,[r7, #(0x400+7*4)] @ P
62 bx lr
63
64
65regfile_store:
66 str r10,[r7, #(0x400+7*4)] @ P
67 str r8, [r7, #0x440] @ r0-r2
68 str r9, [r7, #0x444] @ r4-r6
69 mov r9, r6, lsl #16
70 and r9, r9, #(7<<16) @ STACK
71 bic r6, r6, #0xff @ ST
72 mov r3, r4, lsl #16 @ Y
73 mov r2, r4, lsr #16
74 mov r2, r2, lsl #16 @ X
75 add r8, r7, #0x400
76 add r8, r8, #4
77 stmia r8, {r2,r3,r5,r6,r9}
78 bx lr
79
80
81