0001 #ifndef __ASM_MEMCPY_UTILS
0002 #define __ASM_MEMCPY_UTILS
0003
0004 #include <linux/linkage.h>
0005 #include <asm/asi.h>
0006 #include <asm/visasm.h>
0007
0008 ENTRY(__restore_asi_fp)
0009 VISExitHalf
0010 retl
0011 wr %g0, ASI_AIUS, %asi
0012 ENDPROC(__restore_asi_fp)
0013
0014 ENTRY(__restore_asi)
0015 retl
0016 wr %g0, ASI_AIUS, %asi
0017 ENDPROC(__restore_asi)
0018
0019 ENTRY(memcpy_retl_o2)
0020 ba,pt %xcc, __restore_asi
0021 mov %o2, %o0
0022 ENDPROC(memcpy_retl_o2)
0023 ENTRY(memcpy_retl_o2_plus_1)
0024 ba,pt %xcc, __restore_asi
0025 add %o2, 1, %o0
0026 ENDPROC(memcpy_retl_o2_plus_1)
0027 ENTRY(memcpy_retl_o2_plus_3)
0028 ba,pt %xcc, __restore_asi
0029 add %o2, 3, %o0
0030 ENDPROC(memcpy_retl_o2_plus_3)
0031 ENTRY(memcpy_retl_o2_plus_4)
0032 ba,pt %xcc, __restore_asi
0033 add %o2, 4, %o0
0034 ENDPROC(memcpy_retl_o2_plus_4)
0035 ENTRY(memcpy_retl_o2_plus_5)
0036 ba,pt %xcc, __restore_asi
0037 add %o2, 5, %o0
0038 ENDPROC(memcpy_retl_o2_plus_5)
0039 ENTRY(memcpy_retl_o2_plus_6)
0040 ba,pt %xcc, __restore_asi
0041 add %o2, 6, %o0
0042 ENDPROC(memcpy_retl_o2_plus_6)
0043 ENTRY(memcpy_retl_o2_plus_7)
0044 ba,pt %xcc, __restore_asi
0045 add %o2, 7, %o0
0046 ENDPROC(memcpy_retl_o2_plus_7)
0047 ENTRY(memcpy_retl_o2_plus_8)
0048 ba,pt %xcc, __restore_asi
0049 add %o2, 8, %o0
0050 ENDPROC(memcpy_retl_o2_plus_8)
0051 ENTRY(memcpy_retl_o2_plus_15)
0052 ba,pt %xcc, __restore_asi
0053 add %o2, 15, %o0
0054 ENDPROC(memcpy_retl_o2_plus_15)
0055 ENTRY(memcpy_retl_o2_plus_15_8)
0056 add %o2, 15, %o2
0057 ba,pt %xcc, __restore_asi
0058 add %o2, 8, %o0
0059 ENDPROC(memcpy_retl_o2_plus_15_8)
0060 ENTRY(memcpy_retl_o2_plus_16)
0061 ba,pt %xcc, __restore_asi
0062 add %o2, 16, %o0
0063 ENDPROC(memcpy_retl_o2_plus_16)
0064 ENTRY(memcpy_retl_o2_plus_24)
0065 ba,pt %xcc, __restore_asi
0066 add %o2, 24, %o0
0067 ENDPROC(memcpy_retl_o2_plus_24)
0068 ENTRY(memcpy_retl_o2_plus_31)
0069 ba,pt %xcc, __restore_asi
0070 add %o2, 31, %o0
0071 ENDPROC(memcpy_retl_o2_plus_31)
0072 ENTRY(memcpy_retl_o2_plus_32)
0073 ba,pt %xcc, __restore_asi
0074 add %o2, 32, %o0
0075 ENDPROC(memcpy_retl_o2_plus_32)
0076 ENTRY(memcpy_retl_o2_plus_31_32)
0077 add %o2, 31, %o2
0078 ba,pt %xcc, __restore_asi
0079 add %o2, 32, %o0
0080 ENDPROC(memcpy_retl_o2_plus_31_32)
0081 ENTRY(memcpy_retl_o2_plus_31_24)
0082 add %o2, 31, %o2
0083 ba,pt %xcc, __restore_asi
0084 add %o2, 24, %o0
0085 ENDPROC(memcpy_retl_o2_plus_31_24)
0086 ENTRY(memcpy_retl_o2_plus_31_16)
0087 add %o2, 31, %o2
0088 ba,pt %xcc, __restore_asi
0089 add %o2, 16, %o0
0090 ENDPROC(memcpy_retl_o2_plus_31_16)
0091 ENTRY(memcpy_retl_o2_plus_31_8)
0092 add %o2, 31, %o2
0093 ba,pt %xcc, __restore_asi
0094 add %o2, 8, %o0
0095 ENDPROC(memcpy_retl_o2_plus_31_8)
0096 ENTRY(memcpy_retl_o2_plus_63)
0097 ba,pt %xcc, __restore_asi
0098 add %o2, 63, %o0
0099 ENDPROC(memcpy_retl_o2_plus_63)
0100 ENTRY(memcpy_retl_o2_plus_63_64)
0101 add %o2, 63, %o2
0102 ba,pt %xcc, __restore_asi
0103 add %o2, 64, %o0
0104 ENDPROC(memcpy_retl_o2_plus_63_64)
0105 ENTRY(memcpy_retl_o2_plus_63_56)
0106 add %o2, 63, %o2
0107 ba,pt %xcc, __restore_asi
0108 add %o2, 56, %o0
0109 ENDPROC(memcpy_retl_o2_plus_63_56)
0110 ENTRY(memcpy_retl_o2_plus_63_48)
0111 add %o2, 63, %o2
0112 ba,pt %xcc, __restore_asi
0113 add %o2, 48, %o0
0114 ENDPROC(memcpy_retl_o2_plus_63_48)
0115 ENTRY(memcpy_retl_o2_plus_63_40)
0116 add %o2, 63, %o2
0117 ba,pt %xcc, __restore_asi
0118 add %o2, 40, %o0
0119 ENDPROC(memcpy_retl_o2_plus_63_40)
0120 ENTRY(memcpy_retl_o2_plus_63_32)
0121 add %o2, 63, %o2
0122 ba,pt %xcc, __restore_asi
0123 add %o2, 32, %o0
0124 ENDPROC(memcpy_retl_o2_plus_63_32)
0125 ENTRY(memcpy_retl_o2_plus_63_24)
0126 add %o2, 63, %o2
0127 ba,pt %xcc, __restore_asi
0128 add %o2, 24, %o0
0129 ENDPROC(memcpy_retl_o2_plus_63_24)
0130 ENTRY(memcpy_retl_o2_plus_63_16)
0131 add %o2, 63, %o2
0132 ba,pt %xcc, __restore_asi
0133 add %o2, 16, %o0
0134 ENDPROC(memcpy_retl_o2_plus_63_16)
0135 ENTRY(memcpy_retl_o2_plus_63_8)
0136 add %o2, 63, %o2
0137 ba,pt %xcc, __restore_asi
0138 add %o2, 8, %o0
0139 ENDPROC(memcpy_retl_o2_plus_63_8)
0140 ENTRY(memcpy_retl_o2_plus_o5)
0141 ba,pt %xcc, __restore_asi
0142 add %o2, %o5, %o0
0143 ENDPROC(memcpy_retl_o2_plus_o5)
0144 ENTRY(memcpy_retl_o2_plus_o5_plus_1)
0145 add %o5, 1, %o5
0146 ba,pt %xcc, __restore_asi
0147 add %o2, %o5, %o0
0148 ENDPROC(memcpy_retl_o2_plus_o5_plus_1)
0149 ENTRY(memcpy_retl_o2_plus_o5_plus_4)
0150 add %o5, 4, %o5
0151 ba,pt %xcc, __restore_asi
0152 add %o2, %o5, %o0
0153 ENDPROC(memcpy_retl_o2_plus_o5_plus_4)
0154 ENTRY(memcpy_retl_o2_plus_o5_plus_8)
0155 add %o5, 8, %o5
0156 ba,pt %xcc, __restore_asi
0157 add %o2, %o5, %o0
0158 ENDPROC(memcpy_retl_o2_plus_o5_plus_8)
0159 ENTRY(memcpy_retl_o2_plus_o5_plus_16)
0160 add %o5, 16, %o5
0161 ba,pt %xcc, __restore_asi
0162 add %o2, %o5, %o0
0163 ENDPROC(memcpy_retl_o2_plus_o5_plus_16)
0164 ENTRY(memcpy_retl_o2_plus_o5_plus_24)
0165 add %o5, 24, %o5
0166 ba,pt %xcc, __restore_asi
0167 add %o2, %o5, %o0
0168 ENDPROC(memcpy_retl_o2_plus_o5_plus_24)
0169 ENTRY(memcpy_retl_o2_plus_o5_plus_32)
0170 add %o5, 32, %o5
0171 ba,pt %xcc, __restore_asi
0172 add %o2, %o5, %o0
0173 ENDPROC(memcpy_retl_o2_plus_o5_plus_32)
0174 ENTRY(memcpy_retl_o2_plus_o5_64)
0175 add %o5, 32, %o5
0176 ba,pt %xcc, __restore_asi
0177 add %o2, %o5, %o0
0178 ENDPROC(memcpy_retl_o2_plus_o5_64)
0179 ENTRY(memcpy_retl_o2_plus_g1)
0180 ba,pt %xcc, __restore_asi
0181 add %o2, %g1, %o0
0182 ENDPROC(memcpy_retl_o2_plus_g1)
0183 ENTRY(memcpy_retl_o2_plus_g1_plus_1)
0184 add %g1, 1, %g1
0185 ba,pt %xcc, __restore_asi
0186 add %o2, %g1, %o0
0187 ENDPROC(memcpy_retl_o2_plus_g1_plus_1)
0188 ENTRY(memcpy_retl_o2_plus_g1_plus_8)
0189 add %g1, 8, %g1
0190 ba,pt %xcc, __restore_asi
0191 add %o2, %g1, %o0
0192 ENDPROC(memcpy_retl_o2_plus_g1_plus_8)
0193 ENTRY(memcpy_retl_o2_plus_o4)
0194 ba,pt %xcc, __restore_asi
0195 add %o2, %o4, %o0
0196 ENDPROC(memcpy_retl_o2_plus_o4)
0197 ENTRY(memcpy_retl_o2_plus_o4_plus_8)
0198 add %o4, 8, %o4
0199 ba,pt %xcc, __restore_asi
0200 add %o2, %o4, %o0
0201 ENDPROC(memcpy_retl_o2_plus_o4_plus_8)
0202 ENTRY(memcpy_retl_o2_plus_o4_plus_16)
0203 add %o4, 16, %o4
0204 ba,pt %xcc, __restore_asi
0205 add %o2, %o4, %o0
0206 ENDPROC(memcpy_retl_o2_plus_o4_plus_16)
0207 ENTRY(memcpy_retl_o2_plus_o4_plus_24)
0208 add %o4, 24, %o4
0209 ba,pt %xcc, __restore_asi
0210 add %o2, %o4, %o0
0211 ENDPROC(memcpy_retl_o2_plus_o4_plus_24)
0212 ENTRY(memcpy_retl_o2_plus_o4_plus_32)
0213 add %o4, 32, %o4
0214 ba,pt %xcc, __restore_asi
0215 add %o2, %o4, %o0
0216 ENDPROC(memcpy_retl_o2_plus_o4_plus_32)
0217 ENTRY(memcpy_retl_o2_plus_o4_plus_40)
0218 add %o4, 40, %o4
0219 ba,pt %xcc, __restore_asi
0220 add %o2, %o4, %o0
0221 ENDPROC(memcpy_retl_o2_plus_o4_plus_40)
0222 ENTRY(memcpy_retl_o2_plus_o4_plus_48)
0223 add %o4, 48, %o4
0224 ba,pt %xcc, __restore_asi
0225 add %o2, %o4, %o0
0226 ENDPROC(memcpy_retl_o2_plus_o4_plus_48)
0227 ENTRY(memcpy_retl_o2_plus_o4_plus_56)
0228 add %o4, 56, %o4
0229 ba,pt %xcc, __restore_asi
0230 add %o2, %o4, %o0
0231 ENDPROC(memcpy_retl_o2_plus_o4_plus_56)
0232 ENTRY(memcpy_retl_o2_plus_o4_plus_64)
0233 add %o4, 64, %o4
0234 ba,pt %xcc, __restore_asi
0235 add %o2, %o4, %o0
0236 ENDPROC(memcpy_retl_o2_plus_o4_plus_64)
0237 ENTRY(memcpy_retl_o2_plus_o5_plus_64)
0238 add %o5, 64, %o5
0239 ba,pt %xcc, __restore_asi
0240 add %o2, %o5, %o0
0241 ENDPROC(memcpy_retl_o2_plus_o5_plus_64)
0242 ENTRY(memcpy_retl_o2_plus_o3_fp)
0243 ba,pt %xcc, __restore_asi_fp
0244 add %o2, %o3, %o0
0245 ENDPROC(memcpy_retl_o2_plus_o3_fp)
0246 ENTRY(memcpy_retl_o2_plus_o3_plus_1_fp)
0247 add %o3, 1, %o3
0248 ba,pt %xcc, __restore_asi_fp
0249 add %o2, %o3, %o0
0250 ENDPROC(memcpy_retl_o2_plus_o3_plus_1_fp)
0251 ENTRY(memcpy_retl_o2_plus_o3_plus_4_fp)
0252 add %o3, 4, %o3
0253 ba,pt %xcc, __restore_asi_fp
0254 add %o2, %o3, %o0
0255 ENDPROC(memcpy_retl_o2_plus_o3_plus_4_fp)
0256 ENTRY(memcpy_retl_o2_plus_o4_fp)
0257 ba,pt %xcc, __restore_asi_fp
0258 add %o2, %o4, %o0
0259 ENDPROC(memcpy_retl_o2_plus_o4_fp)
0260 ENTRY(memcpy_retl_o2_plus_o4_plus_8_fp)
0261 add %o4, 8, %o4
0262 ba,pt %xcc, __restore_asi_fp
0263 add %o2, %o4, %o0
0264 ENDPROC(memcpy_retl_o2_plus_o4_plus_8_fp)
0265 ENTRY(memcpy_retl_o2_plus_o4_plus_16_fp)
0266 add %o4, 16, %o4
0267 ba,pt %xcc, __restore_asi_fp
0268 add %o2, %o4, %o0
0269 ENDPROC(memcpy_retl_o2_plus_o4_plus_16_fp)
0270 ENTRY(memcpy_retl_o2_plus_o4_plus_24_fp)
0271 add %o4, 24, %o4
0272 ba,pt %xcc, __restore_asi_fp
0273 add %o2, %o4, %o0
0274 ENDPROC(memcpy_retl_o2_plus_o4_plus_24_fp)
0275 ENTRY(memcpy_retl_o2_plus_o4_plus_32_fp)
0276 add %o4, 32, %o4
0277 ba,pt %xcc, __restore_asi_fp
0278 add %o2, %o4, %o0
0279 ENDPROC(memcpy_retl_o2_plus_o4_plus_32_fp)
0280 ENTRY(memcpy_retl_o2_plus_o4_plus_40_fp)
0281 add %o4, 40, %o4
0282 ba,pt %xcc, __restore_asi_fp
0283 add %o2, %o4, %o0
0284 ENDPROC(memcpy_retl_o2_plus_o4_plus_40_fp)
0285 ENTRY(memcpy_retl_o2_plus_o4_plus_48_fp)
0286 add %o4, 48, %o4
0287 ba,pt %xcc, __restore_asi_fp
0288 add %o2, %o4, %o0
0289 ENDPROC(memcpy_retl_o2_plus_o4_plus_48_fp)
0290 ENTRY(memcpy_retl_o2_plus_o4_plus_56_fp)
0291 add %o4, 56, %o4
0292 ba,pt %xcc, __restore_asi_fp
0293 add %o2, %o4, %o0
0294 ENDPROC(memcpy_retl_o2_plus_o4_plus_56_fp)
0295 ENTRY(memcpy_retl_o2_plus_o4_plus_64_fp)
0296 add %o4, 64, %o4
0297 ba,pt %xcc, __restore_asi_fp
0298 add %o2, %o4, %o0
0299 ENDPROC(memcpy_retl_o2_plus_o4_plus_64_fp)
0300 ENTRY(memcpy_retl_o2_plus_o5_fp)
0301 ba,pt %xcc, __restore_asi_fp
0302 add %o2, %o5, %o0
0303 ENDPROC(memcpy_retl_o2_plus_o5_fp)
0304 ENTRY(memcpy_retl_o2_plus_o5_plus_64_fp)
0305 add %o5, 64, %o5
0306 ba,pt %xcc, __restore_asi_fp
0307 add %o2, %o5, %o0
0308 ENDPROC(memcpy_retl_o2_plus_o5_plus_64_fp)
0309 ENTRY(memcpy_retl_o2_plus_o5_plus_56_fp)
0310 add %o5, 56, %o5
0311 ba,pt %xcc, __restore_asi_fp
0312 add %o2, %o5, %o0
0313 ENDPROC(memcpy_retl_o2_plus_o5_plus_56_fp)
0314 ENTRY(memcpy_retl_o2_plus_o5_plus_48_fp)
0315 add %o5, 48, %o5
0316 ba,pt %xcc, __restore_asi_fp
0317 add %o2, %o5, %o0
0318 ENDPROC(memcpy_retl_o2_plus_o5_plus_48_fp)
0319 ENTRY(memcpy_retl_o2_plus_o5_plus_40_fp)
0320 add %o5, 40, %o5
0321 ba,pt %xcc, __restore_asi_fp
0322 add %o2, %o5, %o0
0323 ENDPROC(memcpy_retl_o2_plus_o5_plus_40_fp)
0324 ENTRY(memcpy_retl_o2_plus_o5_plus_32_fp)
0325 add %o5, 32, %o5
0326 ba,pt %xcc, __restore_asi_fp
0327 add %o2, %o5, %o0
0328 ENDPROC(memcpy_retl_o2_plus_o5_plus_32_fp)
0329 ENTRY(memcpy_retl_o2_plus_o5_plus_24_fp)
0330 add %o5, 24, %o5
0331 ba,pt %xcc, __restore_asi_fp
0332 add %o2, %o5, %o0
0333 ENDPROC(memcpy_retl_o2_plus_o5_plus_24_fp)
0334 ENTRY(memcpy_retl_o2_plus_o5_plus_16_fp)
0335 add %o5, 16, %o5
0336 ba,pt %xcc, __restore_asi_fp
0337 add %o2, %o5, %o0
0338 ENDPROC(memcpy_retl_o2_plus_o5_plus_16_fp)
0339 ENTRY(memcpy_retl_o2_plus_o5_plus_8_fp)
0340 add %o5, 8, %o5
0341 ba,pt %xcc, __restore_asi_fp
0342 add %o2, %o5, %o0
0343 ENDPROC(memcpy_retl_o2_plus_o5_plus_8_fp)
0344
0345 #endif