Loading arch/i386/lib/checksum.S +60 −9 Original line number Diff line number Diff line Loading @@ -25,6 +25,8 @@ * 2 of the License, or (at your option) any later version. */ #include <linux/linkage.h> #include <asm/dwarf2.h> #include <asm/errno.h> /* Loading @@ -36,8 +38,6 @@ unsigned int csum_partial(const unsigned char * buff, int len, unsigned int sum) */ .text .align 4 .globl csum_partial #ifndef CONFIG_X86_USE_PPRO_CHECKSUM Loading @@ -48,9 +48,14 @@ unsigned int csum_partial(const unsigned char * buff, int len, unsigned int sum) * Fortunately, it is easy to convert 2-byte alignment to 4-byte * alignment for the unrolled loop. */ csum_partial: ENTRY(csum_partial) CFI_STARTPROC pushl %esi CFI_ADJUST_CFA_OFFSET 4 CFI_REL_OFFSET esi, 0 pushl %ebx CFI_ADJUST_CFA_OFFSET 4 CFI_REL_OFFSET ebx, 0 movl 20(%esp),%eax # Function arg: unsigned int sum movl 16(%esp),%ecx # Function arg: int len movl 12(%esp),%esi # Function arg: unsigned char *buff Loading Loading @@ -128,16 +133,27 @@ csum_partial: roll $8, %eax 8: popl %ebx CFI_ADJUST_CFA_OFFSET -4 CFI_RESTORE ebx popl %esi CFI_ADJUST_CFA_OFFSET -4 CFI_RESTORE esi ret CFI_ENDPROC ENDPROC(csum_partial) #else /* Version for PentiumII/PPro */ csum_partial: ENTRY(csum_partial) CFI_STARTPROC pushl %esi CFI_ADJUST_CFA_OFFSET 4 CFI_REL_OFFSET esi, 0 pushl %ebx CFI_ADJUST_CFA_OFFSET 4 CFI_REL_OFFSET ebx, 0 movl 20(%esp),%eax # Function arg: unsigned int sum movl 16(%esp),%ecx # Function arg: int len movl 12(%esp),%esi # Function arg: const unsigned char *buf Loading Loading @@ -245,8 +261,14 @@ csum_partial: roll $8, %eax 90: popl %ebx CFI_ADJUST_CFA_OFFSET -4 CFI_RESTORE ebx popl %esi CFI_ADJUST_CFA_OFFSET -4 CFI_RESTORE esi ret CFI_ENDPROC ENDPROC(csum_partial) #endif Loading Loading @@ -278,19 +300,24 @@ unsigned int csum_partial_copy_generic (const char *src, char *dst, .long 9999b, 6002f ; \ .previous .align 4 .globl csum_partial_copy_generic #ifndef CONFIG_X86_USE_PPRO_CHECKSUM #define ARGBASE 16 #define FP 12 csum_partial_copy_generic: ENTRY(csum_partial_copy_generic) CFI_STARTPROC subl $4,%esp CFI_ADJUST_CFA_OFFSET 4 pushl %edi CFI_ADJUST_CFA_OFFSET 4 CFI_REL_OFFSET edi, 0 pushl %esi CFI_ADJUST_CFA_OFFSET 4 CFI_REL_OFFSET esi, 0 pushl %ebx CFI_ADJUST_CFA_OFFSET 4 CFI_REL_OFFSET ebx, 0 movl ARGBASE+16(%esp),%eax # sum movl ARGBASE+12(%esp),%ecx # len movl ARGBASE+4(%esp),%esi # src Loading Loading @@ -400,10 +427,19 @@ DST( movb %cl, (%edi) ) .previous popl %ebx CFI_ADJUST_CFA_OFFSET -4 CFI_RESTORE ebx popl %esi CFI_ADJUST_CFA_OFFSET -4 CFI_RESTORE esi popl %edi CFI_ADJUST_CFA_OFFSET -4 CFI_RESTORE edi popl %ecx # equivalent to addl $4,%esp CFI_ADJUST_CFA_OFFSET -4 ret CFI_ENDPROC ENDPROC(csum_partial_copy_generic) #else Loading @@ -421,10 +457,17 @@ DST( movb %cl, (%edi) ) #define ARGBASE 12 csum_partial_copy_generic: ENTRY(csum_partial_copy_generic) CFI_STARTPROC pushl %ebx CFI_ADJUST_CFA_OFFSET 4 CFI_REL_OFFSET ebx, 0 pushl %edi CFI_ADJUST_CFA_OFFSET 4 CFI_REL_OFFSET edi, 0 pushl %esi CFI_ADJUST_CFA_OFFSET 4 CFI_REL_OFFSET esi, 0 movl ARGBASE+4(%esp),%esi #src movl ARGBASE+8(%esp),%edi #dst movl ARGBASE+12(%esp),%ecx #len Loading Loading @@ -485,9 +528,17 @@ DST( movb %dl, (%edi) ) .previous popl %esi CFI_ADJUST_CFA_OFFSET -4 CFI_RESTORE esi popl %edi CFI_ADJUST_CFA_OFFSET -4 CFI_RESTORE edi popl %ebx CFI_ADJUST_CFA_OFFSET -4 CFI_RESTORE ebx ret CFI_ENDPROC ENDPROC(csum_partial_copy_generic) #undef ROUND #undef ROUND1 Loading arch/i386/lib/getuser.S +17 −9 Original line number Diff line number Diff line Loading @@ -8,6 +8,8 @@ * return an error value in addition to the "real" * return value. */ #include <linux/linkage.h> #include <asm/dwarf2.h> #include <asm/thread_info.h> Loading @@ -24,19 +26,19 @@ */ .text .align 4 .globl __get_user_1 __get_user_1: ENTRY(__get_user_1) CFI_STARTPROC GET_THREAD_INFO(%edx) cmpl TI_addr_limit(%edx),%eax jae bad_get_user 1: movzbl (%eax),%edx xorl %eax,%eax ret CFI_ENDPROC ENDPROC(__get_user_1) .align 4 .globl __get_user_2 __get_user_2: ENTRY(__get_user_2) CFI_STARTPROC addl $1,%eax jc bad_get_user GET_THREAD_INFO(%edx) Loading @@ -45,10 +47,11 @@ __get_user_2: 2: movzwl -1(%eax),%edx xorl %eax,%eax ret CFI_ENDPROC ENDPROC(__get_user_2) .align 4 .globl __get_user_4 __get_user_4: ENTRY(__get_user_4) CFI_STARTPROC addl $3,%eax jc bad_get_user GET_THREAD_INFO(%edx) Loading @@ -57,11 +60,16 @@ __get_user_4: 3: movl -3(%eax),%edx xorl %eax,%eax ret CFI_ENDPROC ENDPROC(__get_user_4) bad_get_user: CFI_STARTPROC xorl %edx,%edx movl $-14,%eax ret CFI_ENDPROC END(bad_get_user) .section __ex_table,"a" .long 1b,bad_get_user Loading arch/i386/lib/putuser.S +25 −14 Original line number Diff line number Diff line Loading @@ -8,6 +8,8 @@ * return an error value in addition to the "real" * return value. */ #include <linux/linkage.h> #include <asm/dwarf2.h> #include <asm/thread_info.h> Loading @@ -23,23 +25,28 @@ * as they get called from within inline assembly. */ #define ENTER pushl %ebx ; GET_THREAD_INFO(%ebx) #define EXIT popl %ebx ; ret #define ENTER CFI_STARTPROC ; \ pushl %ebx ; \ CFI_ADJUST_CFA_OFFSET 4 ; \ CFI_REL_OFFSET ebx, 0 ; \ GET_THREAD_INFO(%ebx) #define EXIT popl %ebx ; \ CFI_ADJUST_CFA_OFFSET -4 ; \ CFI_RESTORE ebx ; \ ret ; \ CFI_ENDPROC .text .align 4 .globl __put_user_1 __put_user_1: ENTRY(__put_user_1) ENTER cmpl TI_addr_limit(%ebx),%ecx jae bad_put_user 1: movb %al,(%ecx) xorl %eax,%eax EXIT ENDPROC(__put_user_1) .align 4 .globl __put_user_2 __put_user_2: ENTRY(__put_user_2) ENTER movl TI_addr_limit(%ebx),%ebx subl $1,%ebx Loading @@ -48,10 +55,9 @@ __put_user_2: 2: movw %ax,(%ecx) xorl %eax,%eax EXIT ENDPROC(__put_user_2) .align 4 .globl __put_user_4 __put_user_4: ENTRY(__put_user_4) ENTER movl TI_addr_limit(%ebx),%ebx subl $3,%ebx Loading @@ -60,10 +66,9 @@ __put_user_4: 3: movl %eax,(%ecx) xorl %eax,%eax EXIT ENDPROC(__put_user_4) .align 4 .globl __put_user_8 __put_user_8: ENTRY(__put_user_8) ENTER movl TI_addr_limit(%ebx),%ebx subl $7,%ebx Loading @@ -73,10 +78,16 @@ __put_user_8: 5: movl %edx,4(%ecx) xorl %eax,%eax EXIT ENDPROC(__put_user_8) bad_put_user: CFI_STARTPROC simple CFI_DEF_CFA esp, 2*4 CFI_OFFSET eip, -1*4 CFI_OFFSET ebx, -2*4 movl $-14,%eax EXIT END(bad_put_user) .section __ex_table,"a" .long 1b,bad_put_user Loading Loading
arch/i386/lib/checksum.S +60 −9 Original line number Diff line number Diff line Loading @@ -25,6 +25,8 @@ * 2 of the License, or (at your option) any later version. */ #include <linux/linkage.h> #include <asm/dwarf2.h> #include <asm/errno.h> /* Loading @@ -36,8 +38,6 @@ unsigned int csum_partial(const unsigned char * buff, int len, unsigned int sum) */ .text .align 4 .globl csum_partial #ifndef CONFIG_X86_USE_PPRO_CHECKSUM Loading @@ -48,9 +48,14 @@ unsigned int csum_partial(const unsigned char * buff, int len, unsigned int sum) * Fortunately, it is easy to convert 2-byte alignment to 4-byte * alignment for the unrolled loop. */ csum_partial: ENTRY(csum_partial) CFI_STARTPROC pushl %esi CFI_ADJUST_CFA_OFFSET 4 CFI_REL_OFFSET esi, 0 pushl %ebx CFI_ADJUST_CFA_OFFSET 4 CFI_REL_OFFSET ebx, 0 movl 20(%esp),%eax # Function arg: unsigned int sum movl 16(%esp),%ecx # Function arg: int len movl 12(%esp),%esi # Function arg: unsigned char *buff Loading Loading @@ -128,16 +133,27 @@ csum_partial: roll $8, %eax 8: popl %ebx CFI_ADJUST_CFA_OFFSET -4 CFI_RESTORE ebx popl %esi CFI_ADJUST_CFA_OFFSET -4 CFI_RESTORE esi ret CFI_ENDPROC ENDPROC(csum_partial) #else /* Version for PentiumII/PPro */ csum_partial: ENTRY(csum_partial) CFI_STARTPROC pushl %esi CFI_ADJUST_CFA_OFFSET 4 CFI_REL_OFFSET esi, 0 pushl %ebx CFI_ADJUST_CFA_OFFSET 4 CFI_REL_OFFSET ebx, 0 movl 20(%esp),%eax # Function arg: unsigned int sum movl 16(%esp),%ecx # Function arg: int len movl 12(%esp),%esi # Function arg: const unsigned char *buf Loading Loading @@ -245,8 +261,14 @@ csum_partial: roll $8, %eax 90: popl %ebx CFI_ADJUST_CFA_OFFSET -4 CFI_RESTORE ebx popl %esi CFI_ADJUST_CFA_OFFSET -4 CFI_RESTORE esi ret CFI_ENDPROC ENDPROC(csum_partial) #endif Loading Loading @@ -278,19 +300,24 @@ unsigned int csum_partial_copy_generic (const char *src, char *dst, .long 9999b, 6002f ; \ .previous .align 4 .globl csum_partial_copy_generic #ifndef CONFIG_X86_USE_PPRO_CHECKSUM #define ARGBASE 16 #define FP 12 csum_partial_copy_generic: ENTRY(csum_partial_copy_generic) CFI_STARTPROC subl $4,%esp CFI_ADJUST_CFA_OFFSET 4 pushl %edi CFI_ADJUST_CFA_OFFSET 4 CFI_REL_OFFSET edi, 0 pushl %esi CFI_ADJUST_CFA_OFFSET 4 CFI_REL_OFFSET esi, 0 pushl %ebx CFI_ADJUST_CFA_OFFSET 4 CFI_REL_OFFSET ebx, 0 movl ARGBASE+16(%esp),%eax # sum movl ARGBASE+12(%esp),%ecx # len movl ARGBASE+4(%esp),%esi # src Loading Loading @@ -400,10 +427,19 @@ DST( movb %cl, (%edi) ) .previous popl %ebx CFI_ADJUST_CFA_OFFSET -4 CFI_RESTORE ebx popl %esi CFI_ADJUST_CFA_OFFSET -4 CFI_RESTORE esi popl %edi CFI_ADJUST_CFA_OFFSET -4 CFI_RESTORE edi popl %ecx # equivalent to addl $4,%esp CFI_ADJUST_CFA_OFFSET -4 ret CFI_ENDPROC ENDPROC(csum_partial_copy_generic) #else Loading @@ -421,10 +457,17 @@ DST( movb %cl, (%edi) ) #define ARGBASE 12 csum_partial_copy_generic: ENTRY(csum_partial_copy_generic) CFI_STARTPROC pushl %ebx CFI_ADJUST_CFA_OFFSET 4 CFI_REL_OFFSET ebx, 0 pushl %edi CFI_ADJUST_CFA_OFFSET 4 CFI_REL_OFFSET edi, 0 pushl %esi CFI_ADJUST_CFA_OFFSET 4 CFI_REL_OFFSET esi, 0 movl ARGBASE+4(%esp),%esi #src movl ARGBASE+8(%esp),%edi #dst movl ARGBASE+12(%esp),%ecx #len Loading Loading @@ -485,9 +528,17 @@ DST( movb %dl, (%edi) ) .previous popl %esi CFI_ADJUST_CFA_OFFSET -4 CFI_RESTORE esi popl %edi CFI_ADJUST_CFA_OFFSET -4 CFI_RESTORE edi popl %ebx CFI_ADJUST_CFA_OFFSET -4 CFI_RESTORE ebx ret CFI_ENDPROC ENDPROC(csum_partial_copy_generic) #undef ROUND #undef ROUND1 Loading
arch/i386/lib/getuser.S +17 −9 Original line number Diff line number Diff line Loading @@ -8,6 +8,8 @@ * return an error value in addition to the "real" * return value. */ #include <linux/linkage.h> #include <asm/dwarf2.h> #include <asm/thread_info.h> Loading @@ -24,19 +26,19 @@ */ .text .align 4 .globl __get_user_1 __get_user_1: ENTRY(__get_user_1) CFI_STARTPROC GET_THREAD_INFO(%edx) cmpl TI_addr_limit(%edx),%eax jae bad_get_user 1: movzbl (%eax),%edx xorl %eax,%eax ret CFI_ENDPROC ENDPROC(__get_user_1) .align 4 .globl __get_user_2 __get_user_2: ENTRY(__get_user_2) CFI_STARTPROC addl $1,%eax jc bad_get_user GET_THREAD_INFO(%edx) Loading @@ -45,10 +47,11 @@ __get_user_2: 2: movzwl -1(%eax),%edx xorl %eax,%eax ret CFI_ENDPROC ENDPROC(__get_user_2) .align 4 .globl __get_user_4 __get_user_4: ENTRY(__get_user_4) CFI_STARTPROC addl $3,%eax jc bad_get_user GET_THREAD_INFO(%edx) Loading @@ -57,11 +60,16 @@ __get_user_4: 3: movl -3(%eax),%edx xorl %eax,%eax ret CFI_ENDPROC ENDPROC(__get_user_4) bad_get_user: CFI_STARTPROC xorl %edx,%edx movl $-14,%eax ret CFI_ENDPROC END(bad_get_user) .section __ex_table,"a" .long 1b,bad_get_user Loading
arch/i386/lib/putuser.S +25 −14 Original line number Diff line number Diff line Loading @@ -8,6 +8,8 @@ * return an error value in addition to the "real" * return value. */ #include <linux/linkage.h> #include <asm/dwarf2.h> #include <asm/thread_info.h> Loading @@ -23,23 +25,28 @@ * as they get called from within inline assembly. */ #define ENTER pushl %ebx ; GET_THREAD_INFO(%ebx) #define EXIT popl %ebx ; ret #define ENTER CFI_STARTPROC ; \ pushl %ebx ; \ CFI_ADJUST_CFA_OFFSET 4 ; \ CFI_REL_OFFSET ebx, 0 ; \ GET_THREAD_INFO(%ebx) #define EXIT popl %ebx ; \ CFI_ADJUST_CFA_OFFSET -4 ; \ CFI_RESTORE ebx ; \ ret ; \ CFI_ENDPROC .text .align 4 .globl __put_user_1 __put_user_1: ENTRY(__put_user_1) ENTER cmpl TI_addr_limit(%ebx),%ecx jae bad_put_user 1: movb %al,(%ecx) xorl %eax,%eax EXIT ENDPROC(__put_user_1) .align 4 .globl __put_user_2 __put_user_2: ENTRY(__put_user_2) ENTER movl TI_addr_limit(%ebx),%ebx subl $1,%ebx Loading @@ -48,10 +55,9 @@ __put_user_2: 2: movw %ax,(%ecx) xorl %eax,%eax EXIT ENDPROC(__put_user_2) .align 4 .globl __put_user_4 __put_user_4: ENTRY(__put_user_4) ENTER movl TI_addr_limit(%ebx),%ebx subl $3,%ebx Loading @@ -60,10 +66,9 @@ __put_user_4: 3: movl %eax,(%ecx) xorl %eax,%eax EXIT ENDPROC(__put_user_4) .align 4 .globl __put_user_8 __put_user_8: ENTRY(__put_user_8) ENTER movl TI_addr_limit(%ebx),%ebx subl $7,%ebx Loading @@ -73,10 +78,16 @@ __put_user_8: 5: movl %edx,4(%ecx) xorl %eax,%eax EXIT ENDPROC(__put_user_8) bad_put_user: CFI_STARTPROC simple CFI_DEF_CFA esp, 2*4 CFI_OFFSET eip, -1*4 CFI_OFFSET ebx, -2*4 movl $-14,%eax EXIT END(bad_put_user) .section __ex_table,"a" .long 1b,bad_put_user Loading