3 #ifndef PSP_VERSTAGE_SVC_H
4 #define PSP_VERSTAGE_SVC_H
6 #define SVC_CALL4(SVC_ID, R0, R1, R2, R3, Ret) \
7 __asm__ __volatile__ ( \
8 "mov r0, %[reg0]\n\t" \
9 "mov r1, %[reg1]\n\t" \
10 "mov r2, %[reg2]\n\t" \
11 "mov r3, %[reg3]\n\t" \
13 "mov %[result], r0\n\t" \
14 : [result] "=r" (Ret)
\
15 : [id] "i" (SVC_ID), [reg0] "r" (R0), [reg1] "r" (R1), [reg2] "r" (R2), \
17 : "r0", "r1", "r2", "r3", "memory", "cc"
)
19 #define SVC_CALL3(SVC_ID, R0, R1, R2, Ret) \
20 __asm__ __volatile__ ( \
21 "mov r0, %[reg0]\n\t" \
22 "mov r1, %[reg1]\n\t" \
23 "mov r2, %[reg2]\n\t" \
25 "mov %[result], r0\n\t" \
26 : [result] "=r" (Ret)
\
27 : [id] "i" (SVC_ID), [reg0] "r" (R0), [reg1] "r" (R1), [reg2] "r" (R2) \
28 : "r0", "r1", "r2", "memory", "cc"
)
30 #define SVC_CALL2(SVC_ID, R0, R1, Ret) \
31 __asm__ __volatile__ ( \
32 "mov r0, %[reg0]\n\t" \
33 "mov r1, %[reg1]\n\t" \
35 "mov %[result], r0\n\t" \
36 : [result] "=r" (Ret)
\
37 : [id] "i" (SVC_ID), [reg0] "r" (R0), [reg1] "r" (R1)
\
38 : "r0", "r1", "memory", "cc"
)
40 #define SVC_CALL1(SVC_ID, R0, Ret) \
41 __asm__ __volatile__ ( \
42 "mov r0, %[reg0]\n\t" \
44 "mov %[result], r0\n\t" \
45 : [result] "=r" (Ret)
\
46 : [id] "i" (SVC_ID), [reg0] "r" (R0)
\
47 : "r0", "memory", "cc"
)
49 #define SVC_CALL0(SVC_ID, Ret) \
50 __asm__ __volatile__ ( \
52 "mov %[result], r0\n\t" \
53 : [result] "=r" (Ret)
\