hc
2024-02-19 1c055e55a242a33e574e48be530e06770a210dcd
kernel/arch/mips/include/asm/sgiarcs.h
....@@ -12,6 +12,8 @@
1212 #ifndef _ASM_SGIARCS_H
1313 #define _ASM_SGIARCS_H
1414
15
+#include <linux/kernel.h>
16
+
1517 #include <asm/types.h>
1618 #include <asm/fw/arc/types.h>
1719
....@@ -368,110 +370,65 @@
368370
369371 #if defined(CONFIG_64BIT) && defined(CONFIG_FW_ARC32)
370372
371
-#define __arc_clobbers \
372
- "$2", "$3" /* ... */, "$8", "$9", "$10", "$11", \
373
- "$12", "$13", "$14", "$15", "$16", "$24", "$25", "$31"
373
+extern long call_o32(long vec, void *stack, ...);
374
+
375
+extern u64 o32_stk[4096];
376
+#define O32_STK (&o32_stk[ARRAY_SIZE(o32_stk)])
374377
375378 #define ARC_CALL0(dest) \
376379 ({ long __res; \
377380 long __vec = (long) romvec->dest; \
378
- __asm__ __volatile__( \
379
- "dsubu\t$29, 32\n\t" \
380
- "jalr\t%1\n\t" \
381
- "daddu\t$29, 32\n\t" \
382
- "move\t%0, $2" \
383
- : "=r" (__res), "=r" (__vec) \
384
- : "1" (__vec) \
385
- : __arc_clobbers, "$4", "$5", "$6", "$7"); \
386
- (unsigned long) __res; \
381
+ __res = call_o32(__vec, O32_STK); \
382
+ __res; \
387383 })
388384
389385 #define ARC_CALL1(dest, a1) \
390386 ({ long __res; \
391
- register signed int __a1 __asm__("$4") = (int) (long) (a1); \
387
+ int __a1 = (int) (long) (a1); \
392388 long __vec = (long) romvec->dest; \
393
- __asm__ __volatile__( \
394
- "dsubu\t$29, 32\n\t" \
395
- "jalr\t%1\n\t" \
396
- "daddu\t$29, 32\n\t" \
397
- "move\t%0, $2" \
398
- : "=r" (__res), "=r" (__vec) \
399
- : "1" (__vec), "r" (__a1) \
400
- : __arc_clobbers, "$5", "$6", "$7"); \
401
- (unsigned long) __res; \
389
+ __res = call_o32(__vec, O32_STK, __a1); \
390
+ __res; \
402391 })
403392
404393 #define ARC_CALL2(dest, a1, a2) \
405394 ({ long __res; \
406
- register signed int __a1 __asm__("$4") = (int) (long) (a1); \
407
- register signed int __a2 __asm__("$5") = (int) (long) (a2); \
395
+ int __a1 = (int) (long) (a1); \
396
+ int __a2 = (int) (long) (a2); \
408397 long __vec = (long) romvec->dest; \
409
- __asm__ __volatile__( \
410
- "dsubu\t$29, 32\n\t" \
411
- "jalr\t%1\n\t" \
412
- "daddu\t$29, 32\n\t" \
413
- "move\t%0, $2" \
414
- : "=r" (__res), "=r" (__vec) \
415
- : "1" (__vec), "r" (__a1), "r" (__a2) \
416
- : __arc_clobbers, "$6", "$7"); \
398
+ __res = call_o32(__vec, O32_STK, __a1, __a2); \
417399 __res; \
418400 })
419401
420402 #define ARC_CALL3(dest, a1, a2, a3) \
421403 ({ long __res; \
422
- register signed int __a1 __asm__("$4") = (int) (long) (a1); \
423
- register signed int __a2 __asm__("$5") = (int) (long) (a2); \
424
- register signed int __a3 __asm__("$6") = (int) (long) (a3); \
404
+ int __a1 = (int) (long) (a1); \
405
+ int __a2 = (int) (long) (a2); \
406
+ int __a3 = (int) (long) (a3); \
425407 long __vec = (long) romvec->dest; \
426
- __asm__ __volatile__( \
427
- "dsubu\t$29, 32\n\t" \
428
- "jalr\t%1\n\t" \
429
- "daddu\t$29, 32\n\t" \
430
- "move\t%0, $2" \
431
- : "=r" (__res), "=r" (__vec) \
432
- : "1" (__vec), "r" (__a1), "r" (__a2), "r" (__a3) \
433
- : __arc_clobbers, "$7"); \
408
+ __res = call_o32(__vec, O32_STK, __a1, __a2, __a3); \
434409 __res; \
435410 })
436411
437412 #define ARC_CALL4(dest, a1, a2, a3, a4) \
438413 ({ long __res; \
439
- register signed int __a1 __asm__("$4") = (int) (long) (a1); \
440
- register signed int __a2 __asm__("$5") = (int) (long) (a2); \
441
- register signed int __a3 __asm__("$6") = (int) (long) (a3); \
442
- register signed int __a4 __asm__("$7") = (int) (long) (a4); \
414
+ int __a1 = (int) (long) (a1); \
415
+ int __a2 = (int) (long) (a2); \
416
+ int __a3 = (int) (long) (a3); \
417
+ int __a4 = (int) (long) (a4); \
443418 long __vec = (long) romvec->dest; \
444
- __asm__ __volatile__( \
445
- "dsubu\t$29, 32\n\t" \
446
- "jalr\t%1\n\t" \
447
- "daddu\t$29, 32\n\t" \
448
- "move\t%0, $2" \
449
- : "=r" (__res), "=r" (__vec) \
450
- : "1" (__vec), "r" (__a1), "r" (__a2), "r" (__a3), \
451
- "r" (__a4) \
452
- : __arc_clobbers); \
419
+ __res = call_o32(__vec, O32_STK, __a1, __a2, __a3, __a4); \
453420 __res; \
454421 })
455422
456
-#define ARC_CALL5(dest, a1, a2, a3, a4, a5) \
423
+#define ARC_CALL5(dest, a1, a2, a3, a4, a5) \
457424 ({ long __res; \
458
- register signed int __a1 __asm__("$4") = (int) (long) (a1); \
459
- register signed int __a2 __asm__("$5") = (int) (long) (a2); \
460
- register signed int __a3 __asm__("$6") = (int) (long) (a3); \
461
- register signed int __a4 __asm__("$7") = (int) (long) (a4); \
462
- register signed int __a5 = (int) (long) (a5); \
425
+ int __a1 = (int) (long) (a1); \
426
+ int __a2 = (int) (long) (a2); \
427
+ int __a3 = (int) (long) (a3); \
428
+ int __a4 = (int) (long) (a4); \
429
+ int __a5 = (int) (long) (a5); \
463430 long __vec = (long) romvec->dest; \
464
- __asm__ __volatile__( \
465
- "dsubu\t$29, 32\n\t" \
466
- "sw\t%7, 16($29)\n\t" \
467
- "jalr\t%1\n\t" \
468
- "daddu\t$29, 32\n\t" \
469
- "move\t%0, $2" \
470
- : "=r" (__res), "=r" (__vec) \
471
- : "1" (__vec), \
472
- "r" (__a1), "r" (__a2), "r" (__a3), "r" (__a4), \
473
- "r" (__a5) \
474
- : __arc_clobbers); \
431
+ __res = call_o32(__vec, O32_STK, __a1, __a2, __a3, __a4, __a5); \
475432 __res; \
476433 })
477434