linux/arch/arm/lib/io-writesw-armv3.S
<<
>>
Prefs
   1/*
   2 *  linux/arch/arm/lib/io-writesw-armv3.S
   3 *
   4 *  Copyright (C) 1995-2000 Russell King
   5 *
   6 * This program is free software; you can redistribute it and/or modify
   7 * it under the terms of the GNU General Public License version 2 as
   8 * published by the Free Software Foundation.
   9 */
  10#include <linux/linkage.h>
  11#include <asm/assembler.h>
  12
  13.Loutsw_bad_alignment:
  14                adr     r0, .Loutsw_bad_align_msg
  15                mov     r2, lr
  16                b       panic
  17.Loutsw_bad_align_msg:
  18                .asciz  "outsw: bad buffer alignment (0x%p, lr=0x%08lX)\n"
  19                .align
  20
  21.Loutsw_align:  tst     r1, #1
  22                bne     .Loutsw_bad_alignment
  23
  24                add     r1, r1, #2
  25
  26                ldr     r3, [r1, #-4]
  27                mov     r3, r3, lsr #16
  28                orr     r3, r3, r3, lsl #16
  29                str     r3, [r0]
  30                subs    r2, r2, #1
  31                reteq   lr
  32
  33ENTRY(__raw_writesw)
  34                teq     r2, #0          @ do we have to check for the zero len?
  35                reteq   lr
  36                tst     r1, #3
  37                bne     .Loutsw_align
  38
  39                stmfd   sp!, {r4, r5, r6, lr}
  40
  41                subs    r2, r2, #8
  42                bmi     .Lno_outsw_8
  43
  44.Loutsw_8_lp:   ldmia   r1!, {r3, r4, r5, r6}
  45
  46                mov     ip, r3, lsl #16
  47                orr     ip, ip, ip, lsr #16
  48                str     ip, [r0]
  49
  50                mov     ip, r3, lsr #16
  51                orr     ip, ip, ip, lsl #16
  52                str     ip, [r0]
  53
  54                mov     ip, r4, lsl #16
  55                orr     ip, ip, ip, lsr #16
  56                str     ip, [r0]
  57
  58                mov     ip, r4, lsr #16
  59                orr     ip, ip, ip, lsl #16
  60                str     ip, [r0]
  61
  62                mov     ip, r5, lsl #16
  63                orr     ip, ip, ip, lsr #16
  64                str     ip, [r0]
  65
  66                mov     ip, r5, lsr #16
  67                orr     ip, ip, ip, lsl #16
  68                str     ip, [r0]
  69
  70                mov     ip, r6, lsl #16
  71                orr     ip, ip, ip, lsr #16
  72                str     ip, [r0]
  73
  74                mov     ip, r6, lsr #16
  75                orr     ip, ip, ip, lsl #16
  76                str     ip, [r0]
  77
  78                subs    r2, r2, #8
  79                bpl     .Loutsw_8_lp
  80
  81                tst     r2, #7
  82                ldmeqfd sp!, {r4, r5, r6, pc}
  83
  84.Lno_outsw_8:   tst     r2, #4
  85                beq     .Lno_outsw_4
  86
  87                ldmia   r1!, {r3, r4}
  88
  89                mov     ip, r3, lsl #16
  90                orr     ip, ip, ip, lsr #16
  91                str     ip, [r0]
  92
  93                mov     ip, r3, lsr #16
  94                orr     ip, ip, ip, lsl #16
  95                str     ip, [r0]
  96
  97                mov     ip, r4, lsl #16
  98                orr     ip, ip, ip, lsr #16
  99                str     ip, [r0]
 100
 101                mov     ip, r4, lsr #16
 102                orr     ip, ip, ip, lsl #16
 103                str     ip, [r0]
 104
 105.Lno_outsw_4:   tst     r2, #2
 106                beq     .Lno_outsw_2
 107
 108                ldr     r3, [r1], #4
 109
 110                mov     ip, r3, lsl #16
 111                orr     ip, ip, ip, lsr #16
 112                str     ip, [r0]
 113
 114                mov     ip, r3, lsr #16
 115                orr     ip, ip, ip, lsl #16
 116                str     ip, [r0]
 117
 118.Lno_outsw_2:   tst     r2, #1
 119
 120                ldrne   r3, [r1]
 121
 122                movne   ip, r3, lsl #16
 123                orrne   ip, ip, ip, lsr #16
 124                strne   ip, [r0]
 125
 126                ldmfd   sp!, {r4, r5, r6, pc}
 127