0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015 #include <asm/export.h>
0016
0017
0018 #define EXI(x,y...) \
0019 99: x,##y; \
0020 .section __ex_table,"a"; \
0021 .long 99b - .; \
0022 lda $31, $exitin-99b($31); \
0023 .previous
0024
0025 #define EXO(x,y...) \
0026 99: x,##y; \
0027 .section __ex_table,"a"; \
0028 .long 99b - .; \
0029 lda $31, $exitout-99b($31); \
0030 .previous
0031
0032 .set noat
0033 .align 4
0034 .globl __copy_user
0035 .ent __copy_user
0036 __copy_user:
0037 .prologue 0
0038 mov $18,$0
0039 and $16,7,$3
0040 beq $0,$35
0041 beq $3,$36
0042 subq $3,8,$3
0043 .align 4
0044 $37:
0045 EXI( ldq_u $1,0($17) )
0046 EXO( ldq_u $2,0($16) )
0047 extbl $1,$17,$1
0048 mskbl $2,$16,$2
0049 insbl $1,$16,$1
0050 addq $3,1,$3
0051 bis $1,$2,$1
0052 EXO( stq_u $1,0($16) )
0053 subq $0,1,$0
0054 addq $16,1,$16
0055 addq $17,1,$17
0056 beq $0,$41
0057 bne $3,$37
0058 $36:
0059 and $17,7,$1
0060 bic $0,7,$4
0061 beq $1,$43
0062 beq $4,$48
0063 EXI( ldq_u $3,0($17) )
0064 .align 4
0065 $50:
0066 EXI( ldq_u $2,8($17) )
0067 subq $4,8,$4
0068 extql $3,$17,$3
0069 extqh $2,$17,$1
0070 bis $3,$1,$1
0071 EXO( stq $1,0($16) )
0072 addq $17,8,$17
0073 subq $0,8,$0
0074 addq $16,8,$16
0075 bis $2,$2,$3
0076 bne $4,$50
0077 $48:
0078 beq $0,$41
0079 .align 4
0080 $57:
0081 EXI( ldq_u $1,0($17) )
0082 EXO( ldq_u $2,0($16) )
0083 extbl $1,$17,$1
0084 mskbl $2,$16,$2
0085 insbl $1,$16,$1
0086 bis $1,$2,$1
0087 EXO( stq_u $1,0($16) )
0088 subq $0,1,$0
0089 addq $16,1,$16
0090 addq $17,1,$17
0091 bne $0,$57
0092 br $31,$41
0093 .align 4
0094 $43:
0095 beq $4,$65
0096 .align 4
0097 $66:
0098 EXI( ldq $1,0($17) )
0099 subq $4,8,$4
0100 EXO( stq $1,0($16) )
0101 addq $17,8,$17
0102 subq $0,8,$0
0103 addq $16,8,$16
0104 bne $4,$66
0105 $65:
0106 beq $0,$41
0107 EXI( ldq $2,0($17) )
0108 EXO( ldq $1,0($16) )
0109 mskql $2,$0,$2
0110 mskqh $1,$0,$1
0111 bis $2,$1,$2
0112 EXO( stq $2,0($16) )
0113 bis $31,$31,$0
0114 $41:
0115 $35:
0116 $exitin:
0117 $exitout:
0118 ret $31,($26),1
0119
0120 .end __copy_user
0121 EXPORT_SYMBOL(__copy_user)