@@ -101,7 +101,7 @@ static __always_inline auto SecureMonitorCall(uint64_t a0, uint64_t a1,
101101 uint64_t a4, uint64_t a5,
102102 uint64_t a6, uint64_t a7)
103103 -> const SMCReturnValue {
104- SMCReturnValue ret ;
104+ SMCReturnValue result ;
105105 register uint64_t x0 __asm__ (" x0" ) = a0;
106106 register uint64_t x1 __asm__ (" x1" ) = a1;
107107 register uint64_t x2 __asm__ (" x2" ) = a2;
@@ -110,16 +110,17 @@ static __always_inline auto SecureMonitorCall(uint64_t a0, uint64_t a1,
110110 register uint64_t x5 __asm__ (" x5" ) = a5;
111111 register uint64_t x6 __asm__ (" x6" ) = a6;
112112 register uint64_t x7 __asm__ (" x7" ) = a7;
113- __asm__ volatile (
114- " smc #0\n "
115- " stp x0, x1, [%8]\n "
116- " stp x2, x3, [%8, #16]"
117- : " =r" (x0), " =r" (x1), " =r" (x2), " =r" (x3), " =r" (x4), " =r" (x5), " =r" (x6),
118- " =r" (x7)
119- : " r" (x0), " r" (x1), " r" (x2), " r" (x3), " r" (x4), " r" (x5), " r" (x6), " r" (x7),
120- " r" (&ret)
121- : " memory" );
122- return ret;
113+
114+ __asm__ volatile (" smc #0"
115+ : " +r" (x0), " +r" (x1), " +r" (x2), " +r" (x3)
116+ : " r" (x4), " r" (x5), " r" (x6), " r" (x7)
117+ : " memory" );
118+
119+ result.a0 = x0;
120+ result.a1 = x1;
121+ result.a2 = x2;
122+ result.a3 = x3;
123+ return result;
123124}
124125
125126/* *
0 commit comments