asm_netbsd_arm.s 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. // Copyright 2013 The Go Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style
  3. // license that can be found in the LICENSE file.
  4. #include "../../cmd/ld/textflag.h" // TODO: how to refer to this?
  5. //
  6. // System call support for ARM, NetBSD
  7. //
  8. // func Syscall(trap int32, a1, a2, a3 int32) (r1, r2, err int32);
  9. // func Syscall6(trap int32, a1, a2, a3, a4, a5, a6 int32) (r1, r2, err int32);
  10. // func Syscall9(trap int32, a1, a2, a3, a4, a5, a6, a7, a8, a9 int64) (r1, r2, err int32)
  11. TEXT ·Syscall(SB),NOSPLIT,$0-28
  12. BL runtime·entersyscall(SB)
  13. MOVW 0(FP), R0 // sigcall num
  14. MOVW 4(FP), R1 // a1
  15. MOVW 8(FP), R2 // a2
  16. MOVW 12(FP), R3 // a3
  17. SWI $0 // syscall
  18. MOVW $0, R2
  19. BCS error
  20. MOVW R0, 16(FP) // r1
  21. MOVW R1, 20(FP) // r2
  22. MOVW R2, 24(FP) // err
  23. BL runtime·exitsyscall(SB)
  24. RET
  25. error:
  26. MOVW $-1, R3
  27. MOVW R3, 16(FP) // r1
  28. MOVW R2, 20(FP) // r2
  29. MOVW R0, 24(FP) // err
  30. BL runtime·exitsyscall(SB)
  31. RET
  32. TEXT ·Syscall6(SB),NOSPLIT,$0-40
  33. BL runtime·entersyscall(SB)
  34. MOVW 0(FP), R0 // sigcall num
  35. MOVW 4(FP), R1 // a1
  36. MOVW 8(FP), R2 // a2
  37. MOVW 12(FP), R3 // a3
  38. MOVW R13, R4
  39. MOVW $16(FP), R13 // a4 to a6 are passed on stack
  40. SWI $0 // syscall
  41. MOVW R4, R13
  42. MOVW $0, R2
  43. BCS error6
  44. MOVW R0, 28(FP) // r1
  45. MOVW R1, 32(FP) // r2
  46. MOVW R2, 36(FP) // err
  47. BL runtime·exitsyscall(SB)
  48. RET
  49. error6:
  50. MOVW $-1, R3
  51. MOVW R3, 28(FP) // r1
  52. MOVW R2, 32(FP) // r2
  53. MOVW R0, 36(FP) // err
  54. BL runtime·exitsyscall(SB)
  55. RET
  56. TEXT ·Syscall9(SB),NOSPLIT,$0-52
  57. BL runtime·entersyscall(SB)
  58. MOVW 0(FP), R0 // sigcall num
  59. MOVW 4(FP), R1 // a1
  60. MOVW 8(FP), R2 // a2
  61. MOVW 12(FP), R3 // a3
  62. MOVW R13, R4
  63. MOVW $16(FP), R13 // a4 to a9 are passed on stack
  64. SWI $0 // syscall
  65. MOVW R4, R13
  66. MOVW $0, R2
  67. BCS error9
  68. MOVW R0, 40(FP) // r1
  69. MOVW R1, 44(FP) // r2
  70. MOVW R2, 48(FP) // err
  71. BL runtime·exitsyscall(SB)
  72. RET
  73. error9:
  74. MOVW $-1, R3
  75. MOVW R3, 40(FP) // r1
  76. MOVW R2, 44(FP) // r2
  77. MOVW R0, 48(FP) // err
  78. BL runtime·exitsyscall(SB)
  79. RET
  80. TEXT ·RawSyscall(SB),NOSPLIT,$0-28
  81. MOVW 0(FP), R0 // sigcall num
  82. MOVW 4(FP), R1 // a1
  83. MOVW 8(FP), R2 // a2
  84. MOVW 12(FP), R3 // a3
  85. SWI $0 // syscall
  86. MOVW $0, R2
  87. BCS errorr
  88. MOVW R0, 16(FP) // r1
  89. MOVW R1, 20(FP) // r2
  90. MOVW R2, 24(FP) // err
  91. RET
  92. errorr:
  93. MOVW $-1, R3
  94. MOVW R3, 16(FP) // r1
  95. MOVW R2, 20(FP) // r2
  96. MOVW R0, 24(FP) // err
  97. RET
  98. TEXT ·RawSyscall6(SB),NOSPLIT,$0-40
  99. MOVW 0(FP), R0 // sigcall num
  100. MOVW 4(FP), R1 // a1
  101. MOVW 8(FP), R2 // a2
  102. MOVW 12(FP), R3 // a3
  103. MOVW R13, R4
  104. MOVW $16(FP), R13 // a4 to a9 are passed on stack
  105. SWI $0 // syscall
  106. MOVW R4, R13
  107. MOVW $0, R2
  108. BCS errorr6
  109. MOVW R0, 28(FP) // r1
  110. MOVW R1, 32(FP) // r2
  111. MOVW R2, 36(FP) // err
  112. RET
  113. errorr6:
  114. MOVW $-1, R3
  115. MOVW R3, 28(FP) // r1
  116. MOVW R2, 32(FP) // r2
  117. MOVW R0, 36(FP) // err
  118. RET