0001
0002
0003
0004
0005
0006
0007
0008 #include <linux/errno.h>
0009
0010 .text
0011
0012 retl_efault:
0013 retl
0014 mov -EFAULT, %o0
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025 .globl __do_int_store
0026 __do_int_store:
0027 ld [%o2], %g1
0028 cmp %o1, 2
0029 be 2f
0030 cmp %o1, 4
0031 be 1f
0032 srl %g1, 24, %g2
0033 srl %g1, 16, %g7
0034 4: stb %g2, [%o0]
0035 srl %g1, 8, %g2
0036 5: stb %g7, [%o0 + 1]
0037 ld [%o2 + 4], %g7
0038 6: stb %g2, [%o0 + 2]
0039 srl %g7, 24, %g2
0040 7: stb %g1, [%o0 + 3]
0041 srl %g7, 16, %g1
0042 8: stb %g2, [%o0 + 4]
0043 srl %g7, 8, %g2
0044 9: stb %g1, [%o0 + 5]
0045 10: stb %g2, [%o0 + 6]
0046 b 0f
0047 11: stb %g7, [%o0 + 7]
0048 1: srl %g1, 16, %g7
0049 12: stb %g2, [%o0]
0050 srl %g1, 8, %g2
0051 13: stb %g7, [%o0 + 1]
0052 14: stb %g2, [%o0 + 2]
0053 b 0f
0054 15: stb %g1, [%o0 + 3]
0055 2: srl %g1, 8, %g2
0056 16: stb %g2, [%o0]
0057 17: stb %g1, [%o0 + 1]
0058 0: retl
0059 mov 0, %o0
0060
0061 .section __ex_table,#alloc
0062 .word 4b, retl_efault
0063 .word 5b, retl_efault
0064 .word 6b, retl_efault
0065 .word 7b, retl_efault
0066 .word 8b, retl_efault
0067 .word 9b, retl_efault
0068 .word 10b, retl_efault
0069 .word 11b, retl_efault
0070 .word 12b, retl_efault
0071 .word 13b, retl_efault
0072 .word 14b, retl_efault
0073 .word 15b, retl_efault
0074 .word 16b, retl_efault
0075 .word 17b, retl_efault
0076 .previous
0077
0078
0079
0080
0081
0082
0083
0084
0085
0086
0087
0088 .globl do_int_load
0089 do_int_load:
0090 cmp %o1, 8
0091 be 9f
0092 cmp %o1, 4
0093 be 6f
0094 4: ldub [%o2], %g1
0095 5: ldub [%o2 + 1], %g2
0096 sll %g1, 8, %g1
0097 tst %o3
0098 be 3f
0099 or %g1, %g2, %g1
0100 sll %g1, 16, %g1
0101 sra %g1, 16, %g1
0102 3: b 0f
0103 st %g1, [%o0]
0104 6: ldub [%o2 + 1], %g2
0105 sll %g1, 24, %g1
0106 7: ldub [%o2 + 2], %g7
0107 sll %g2, 16, %g2
0108 8: ldub [%o2 + 3], %g3
0109 sll %g7, 8, %g7
0110 or %g3, %g2, %g3
0111 or %g7, %g3, %g7
0112 or %g1, %g7, %g1
0113 b 0f
0114 st %g1, [%o0]
0115 9: ldub [%o2], %g1
0116 10: ldub [%o2 + 1], %g2
0117 sll %g1, 24, %g1
0118 11: ldub [%o2 + 2], %g7
0119 sll %g2, 16, %g2
0120 12: ldub [%o2 + 3], %g3
0121 sll %g7, 8, %g7
0122 or %g1, %g2, %g1
0123 or %g7, %g3, %g7
0124 or %g1, %g7, %g7
0125 13: ldub [%o2 + 4], %g1
0126 st %g7, [%o0]
0127 14: ldub [%o2 + 5], %g2
0128 sll %g1, 24, %g1
0129 15: ldub [%o2 + 6], %g7
0130 sll %g2, 16, %g2
0131 16: ldub [%o2 + 7], %g3
0132 sll %g7, 8, %g7
0133 or %g1, %g2, %g1
0134 or %g7, %g3, %g7
0135 or %g1, %g7, %g7
0136 st %g7, [%o0 + 4]
0137 0: retl
0138 mov 0, %o0
0139
0140 .section __ex_table,#alloc
0141 .word 4b, retl_efault
0142 .word 5b, retl_efault
0143 .word 6b, retl_efault
0144 .word 7b, retl_efault
0145 .word 8b, retl_efault
0146 .word 9b, retl_efault
0147 .word 10b, retl_efault
0148 .word 11b, retl_efault
0149 .word 12b, retl_efault
0150 .word 13b, retl_efault
0151 .word 14b, retl_efault
0152 .word 15b, retl_efault
0153 .word 16b, retl_efault
0154 .previous