hc
2024-01-05 071106ecf68c401173c58808b1cf5f68cc50d390
kernel/arch/sparc/lib/checksum_32.S
....@@ -144,44 +144,21 @@
144144 cpout: retl ! get outta here
145145 mov %o2, %o0 ! return computed csum
146146
147
- .globl __csum_partial_copy_start, __csum_partial_copy_end
148
-__csum_partial_copy_start:
149
-
150147 /* Work around cpp -rob */
151148 #define ALLOC #alloc
152149 #define EXECINSTR #execinstr
153
-#define EX(x,y,a,b) \
154
-98: x,y; \
155
- .section .fixup,ALLOC,EXECINSTR; \
156
- .align 4; \
157
-99: ba 30f; \
158
- a, b, %o3; \
159
- .section __ex_table,ALLOC; \
160
- .align 4; \
161
- .word 98b, 99b; \
162
- .text; \
163
- .align 4
164
-
165
-#define EX2(x,y) \
150
+#define EX(x,y) \
166151 98: x,y; \
167152 .section __ex_table,ALLOC; \
168153 .align 4; \
169
- .word 98b, 30f; \
154
+ .word 98b, cc_fault; \
170155 .text; \
171156 .align 4
172157
173
-#define EX3(x,y) \
174
-98: x,y; \
158
+#define EXT(start,end) \
175159 .section __ex_table,ALLOC; \
176160 .align 4; \
177
- .word 98b, 96f; \
178
- .text; \
179
- .align 4
180
-
181
-#define EXT(start,end,handler) \
182
- .section __ex_table,ALLOC; \
183
- .align 4; \
184
- .word start, 0, end, handler; \
161
+ .word start, 0, end, cc_fault; \
185162 .text; \
186163 .align 4
187164
....@@ -252,21 +229,21 @@
252229 cc_end_cruft:
253230 be 1f
254231 andcc %o3, 4, %g0
255
- EX(ldd [%o0 + 0x00], %g2, and %o3, 0xf)
232
+ EX(ldd [%o0 + 0x00], %g2)
256233 add %o1, 8, %o1
257234 addcc %g2, %g7, %g7
258235 add %o0, 8, %o0
259236 addxcc %g3, %g7, %g7
260
- EX2(st %g2, [%o1 - 0x08])
237
+ EX(st %g2, [%o1 - 0x08])
261238 addx %g0, %g7, %g7
262239 andcc %o3, 4, %g0
263
- EX2(st %g3, [%o1 - 0x04])
240
+ EX(st %g3, [%o1 - 0x04])
264241 1: be 1f
265242 andcc %o3, 3, %o3
266
- EX(ld [%o0 + 0x00], %g2, add %o3, 4)
243
+ EX(ld [%o0 + 0x00], %g2)
267244 add %o1, 4, %o1
268245 addcc %g2, %g7, %g7
269
- EX2(st %g2, [%o1 - 0x04])
246
+ EX(st %g2, [%o1 - 0x04])
270247 addx %g0, %g7, %g7
271248 andcc %o3, 3, %g0
272249 add %o0, 4, %o0
....@@ -276,14 +253,14 @@
276253 subcc %o3, 2, %o3
277254 b 4f
278255 or %g0, %g0, %o4
279
-2: EX(lduh [%o0 + 0x00], %o4, add %o3, 2)
256
+2: EX(lduh [%o0 + 0x00], %o4)
280257 add %o0, 2, %o0
281
- EX2(sth %o4, [%o1 + 0x00])
258
+ EX(sth %o4, [%o1 + 0x00])
282259 be 6f
283260 add %o1, 2, %o1
284261 sll %o4, 16, %o4
285
-4: EX(ldub [%o0 + 0x00], %o5, add %g0, 1)
286
- EX2(stb %o5, [%o1 + 0x00])
262
+4: EX(ldub [%o0 + 0x00], %o5)
263
+ EX(stb %o5, [%o1 + 0x00])
287264 sll %o5, 8, %o5
288265 or %o5, %o4, %o4
289266 6: addcc %o4, %g7, %g7
....@@ -306,9 +283,9 @@
306283 andcc %o0, 0x2, %g0
307284 be 1f
308285 andcc %o0, 0x4, %g0
309
- EX(lduh [%o0 + 0x00], %g4, add %g1, 0)
286
+ EX(lduh [%o0 + 0x00], %g4)
310287 sub %g1, 2, %g1
311
- EX2(sth %g4, [%o1 + 0x00])
288
+ EX(sth %g4, [%o1 + 0x00])
312289 add %o0, 2, %o0
313290 sll %g4, 16, %g4
314291 addcc %g4, %g7, %g7
....@@ -322,9 +299,9 @@
322299 or %g3, %g7, %g7
323300 1: be 3f
324301 andcc %g1, 0xffffff80, %g0
325
- EX(ld [%o0 + 0x00], %g4, add %g1, 0)
302
+ EX(ld [%o0 + 0x00], %g4)
326303 sub %g1, 4, %g1
327
- EX2(st %g4, [%o1 + 0x00])
304
+ EX(st %g4, [%o1 + 0x00])
328305 add %o0, 4, %o0
329306 addcc %g4, %g7, %g7
330307 add %o1, 4, %o1
....@@ -354,7 +331,7 @@
354331 CSUMCOPY_BIGCHUNK(%o0,%o1,%g7,0x20,%o4,%o5,%g2,%g3,%g4,%g5,%o2,%o3)
355332 CSUMCOPY_BIGCHUNK(%o0,%o1,%g7,0x40,%o4,%o5,%g2,%g3,%g4,%g5,%o2,%o3)
356333 CSUMCOPY_BIGCHUNK(%o0,%o1,%g7,0x60,%o4,%o5,%g2,%g3,%g4,%g5,%o2,%o3)
357
-10: EXT(5b, 10b, 20f) ! note for exception handling
334
+10: EXT(5b, 10b) ! note for exception handling
358335 sub %g1, 128, %g1 ! detract from length
359336 addx %g0, %g7, %g7 ! add in last carry bit
360337 andcc %g1, 0xffffff80, %g0 ! more to csum?
....@@ -379,7 +356,7 @@
379356 CSUMCOPY_LASTCHUNK(%o0,%o1,%g7,0x28,%g2,%g3,%g4,%g5)
380357 CSUMCOPY_LASTCHUNK(%o0,%o1,%g7,0x18,%g2,%g3,%g4,%g5)
381358 CSUMCOPY_LASTCHUNK(%o0,%o1,%g7,0x08,%g2,%g3,%g4,%g5)
382
-12: EXT(cctbl, 12b, 22f) ! note for exception table handling
359
+12: EXT(cctbl, 12b) ! note for exception table handling
383360 addx %g0, %g7, %g7
384361 andcc %o3, 0xf, %g0 ! check for low bits set
385362 ccte: bne cc_end_cruft ! something left, handle it out of band
....@@ -390,7 +367,7 @@
390367 CSUMCOPY_BIGCHUNK_ALIGNED(%o0,%o1,%g7,0x20,%o4,%o5,%g2,%g3,%g4,%g5,%o2,%o3)
391368 CSUMCOPY_BIGCHUNK_ALIGNED(%o0,%o1,%g7,0x40,%o4,%o5,%g2,%g3,%g4,%g5,%o2,%o3)
392369 CSUMCOPY_BIGCHUNK_ALIGNED(%o0,%o1,%g7,0x60,%o4,%o5,%g2,%g3,%g4,%g5,%o2,%o3)
393
-11: EXT(ccdbl, 11b, 21f) ! note for exception table handling
370
+11: EXT(ccdbl, 11b) ! note for exception table handling
394371 sub %g1, 128, %g1 ! detract from length
395372 addx %g0, %g7, %g7 ! add in last carry bit
396373 andcc %g1, 0xffffff80, %g0 ! more to csum?
....@@ -407,9 +384,9 @@
407384 be,a 1f
408385 srl %g1, 1, %g4
409386 sub %g1, 1, %g1
410
- EX(ldub [%o0], %g5, add %g1, 1)
387
+ EX(ldub [%o0], %g5)
411388 add %o0, 1, %o0
412
- EX2(stb %g5, [%o1])
389
+ EX(stb %g5, [%o1])
413390 srl %g1, 1, %g4
414391 add %o1, 1, %o1
415392 1: cmp %g4, 0
....@@ -418,34 +395,34 @@
418395 andcc %o0, 2, %g0
419396 be,a 1f
420397 srl %g4, 1, %g4
421
- EX(lduh [%o0], %o4, add %g1, 0)
398
+ EX(lduh [%o0], %o4)
422399 sub %g1, 2, %g1
423400 srl %o4, 8, %g2
424401 sub %g4, 1, %g4
425
- EX2(stb %g2, [%o1])
402
+ EX(stb %g2, [%o1])
426403 add %o4, %g5, %g5
427
- EX2(stb %o4, [%o1 + 1])
404
+ EX(stb %o4, [%o1 + 1])
428405 add %o0, 2, %o0
429406 srl %g4, 1, %g4
430407 add %o1, 2, %o1
431408 1: cmp %g4, 0
432409 be,a 2f
433410 andcc %g1, 2, %g0
434
- EX3(ld [%o0], %o4)
411
+ EX(ld [%o0], %o4)
435412 5: srl %o4, 24, %g2
436413 srl %o4, 16, %g3
437
- EX2(stb %g2, [%o1])
414
+ EX(stb %g2, [%o1])
438415 srl %o4, 8, %g2
439
- EX2(stb %g3, [%o1 + 1])
416
+ EX(stb %g3, [%o1 + 1])
440417 add %o0, 4, %o0
441
- EX2(stb %g2, [%o1 + 2])
418
+ EX(stb %g2, [%o1 + 2])
442419 addcc %o4, %g5, %g5
443
- EX2(stb %o4, [%o1 + 3])
420
+ EX(stb %o4, [%o1 + 3])
444421 addx %g5, %g0, %g5 ! I am now to lazy to optimize this (question it
445422 add %o1, 4, %o1 ! is worthy). Maybe some day - with the sll/srl
446423 subcc %g4, 1, %g4 ! tricks
447424 bne,a 5b
448
- EX3(ld [%o0], %o4)
425
+ EX(ld [%o0], %o4)
449426 sll %g5, 16, %g2
450427 srl %g5, 16, %g5
451428 srl %g2, 16, %g2
....@@ -453,19 +430,19 @@
453430 add %g2, %g5, %g5
454431 2: be,a 3f
455432 andcc %g1, 1, %g0
456
- EX(lduh [%o0], %o4, and %g1, 3)
433
+ EX(lduh [%o0], %o4)
457434 andcc %g1, 1, %g0
458435 srl %o4, 8, %g2
459436 add %o0, 2, %o0
460
- EX2(stb %g2, [%o1])
437
+ EX(stb %g2, [%o1])
461438 add %g5, %o4, %g5
462
- EX2(stb %o4, [%o1 + 1])
439
+ EX(stb %o4, [%o1 + 1])
463440 add %o1, 2, %o1
464441 3: be,a 1f
465442 sll %g5, 16, %o4
466
- EX(ldub [%o0], %g2, add %g0, 1)
443
+ EX(ldub [%o0], %g2)
467444 sll %g2, 8, %o4
468
- EX2(stb %g2, [%o1])
445
+ EX(stb %g2, [%o1])
469446 add %g5, %o4, %g5
470447 sll %g5, 16, %o4
471448 1: addcc %o4, %g5, %g5
....@@ -481,113 +458,10 @@
481458 4: addcc %g7, %g5, %g7
482459 retl
483460 addx %g0, %g7, %o0
484
-__csum_partial_copy_end:
485461
486462 /* We do these strange calculations for the csum_*_from_user case only, ie.
487463 * we only bother with faults on loads... */
488464
489
-/* o2 = ((g2%20)&3)*8
490
- * o3 = g1 - (g2/20)*32 - o2 */
491
-20:
492
- cmp %g2, 20
493
- blu,a 1f
494
- and %g2, 3, %o2
495
- sub %g1, 32, %g1
496
- b 20b
497
- sub %g2, 20, %g2
498
-1:
499
- sll %o2, 3, %o2
500
- b 31f
501
- sub %g1, %o2, %o3
502
-
503
-/* o2 = (!(g2 & 15) ? 0 : (((g2 & 15) + 1) & ~1)*8)
504
- * o3 = g1 - (g2/16)*32 - o2 */
505
-21:
506
- andcc %g2, 15, %o3
507
- srl %g2, 4, %g2
508
- be,a 1f
509
- clr %o2
510
- add %o3, 1, %o3
511
- and %o3, 14, %o3
512
- sll %o3, 3, %o2
513
-1:
514
- sll %g2, 5, %g2
515
- sub %g1, %g2, %o3
516
- b 31f
517
- sub %o3, %o2, %o3
518
-
519
-/* o0 += (g2/10)*16 - 0x70
520
- * 01 += (g2/10)*16 - 0x70
521
- * o2 = (g2 % 10) ? 8 : 0
522
- * o3 += 0x70 - (g2/10)*16 - o2 */
523
-22:
524
- cmp %g2, 10
525
- blu,a 1f
526
- sub %o0, 0x70, %o0
527
- add %o0, 16, %o0
528
- add %o1, 16, %o1
529
- sub %o3, 16, %o3
530
- b 22b
531
- sub %g2, 10, %g2
532
-1:
533
- sub %o1, 0x70, %o1
534
- add %o3, 0x70, %o3
535
- clr %o2
536
- tst %g2
537
- bne,a 1f
538
- mov 8, %o2
539
-1:
540
- b 31f
541
- sub %o3, %o2, %o3
542
-96:
543
- and %g1, 3, %g1
544
- sll %g4, 2, %g4
545
- add %g1, %g4, %o3
546
-30:
547
-/* %o1 is dst
548
- * %o3 is # bytes to zero out
549
- * %o4 is faulting address
550
- * %o5 is %pc where fault occurred */
551
- clr %o2
552
-31:
553
-/* %o0 is src
554
- * %o1 is dst
555
- * %o2 is # of bytes to copy from src to dst
556
- * %o3 is # bytes to zero out
557
- * %o4 is faulting address
558
- * %o5 is %pc where fault occurred */
559
- save %sp, -104, %sp
560
- mov %i5, %o0
561
- mov %i7, %o1
562
- mov %i4, %o2
563
- call lookup_fault
564
- mov %g7, %i4
565
- cmp %o0, 2
566
- bne 1f
567
- add %g0, -EFAULT, %i5
568
- tst %i2
569
- be 2f
570
- mov %i0, %o1
571
- mov %i1, %o0
572
-5:
573
- call memcpy
574
- mov %i2, %o2
575
- tst %o0
576
- bne,a 2f
577
- add %i3, %i2, %i3
578
- add %i1, %i2, %i1
579
-2:
580
- mov %i1, %o0
581
-6:
582
- call __bzero
583
- mov %i3, %o1
584
-1:
585
- ld [%sp + 168], %o2 ! struct_ptr of parent
586
- st %i5, [%o2]
465
+cc_fault:
587466 ret
588
- restore
589
-
590
- .section __ex_table,#alloc
591
- .align 4
592
- .word 5b,2
593
- .word 6b,2
467
+ clr %o0