Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at v2.6.15-rc1 195 lines 3.3 kB view raw
1/* -*- mode: asm -*- 2 * Due to problems while transferring data I've put these routines as assembly 3 * code. 4 * Since I'm no PPC assembler guru, the code is just the assembler version of 5 6int oktag_to_io(long *paddr,long *addr,long len) 7{ 8 long *addr2 = addr; 9 for(len=(len+sizeof(long)-1)/sizeof(long);len--;) 10 *paddr = *addr2++; 11 return addr2 - addr; 12} 13 14int oktag_from_io(long *addr,long *paddr,long len) 15{ 16 long *addr2 = addr; 17 for(len=(len+sizeof(long)-1)/sizeof(long);len--;) 18 *addr2++ = *paddr; 19 return addr2 - addr; 20} 21 22 * assembled using gcc -O2 -S, with two exception catch points where data 23 * is moved to/from the IO register. 24 */ 25 26#include <linux/config.h> 27 28#ifdef CONFIG_APUS 29 30 .file "oktagon_io.c" 31 32gcc2_compiled.: 33/* 34 .section ".text" 35*/ 36 .align 2 37 .globl oktag_to_io 38 .type oktag_to_io,@function 39oktag_to_io: 40 addi 5,5,3 41 srwi 5,5,2 42 cmpwi 1,5,0 43 mr 9,3 44 mr 3,4 45 addi 5,5,-1 46 bc 12,6,.L3 47.L5: 48 cmpwi 1,5,0 49 lwz 0,0(3) 50 addi 3,3,4 51 addi 5,5,-1 52exp1: stw 0,0(9) 53 bc 4,6,.L5 54.L3: 55ret1: subf 3,4,3 56 srawi 3,3,2 57 blr 58.Lfe1: 59 .size oktag_to_io,.Lfe1-oktag_to_io 60 .align 2 61 .globl oktag_from_io 62 .type oktag_from_io,@function 63oktag_from_io: 64 addi 5,5,3 65 srwi 5,5,2 66 cmpwi 1,5,0 67 mr 9,3 68 addi 5,5,-1 69 bc 12,6,.L9 70.L11: 71 cmpwi 1,5,0 72exp2: lwz 0,0(4) 73 addi 5,5,-1 74 stw 0,0(3) 75 addi 3,3,4 76 bc 4,6,.L11 77.L9: 78ret2: subf 3,9,3 79 srawi 3,3,2 80 blr 81.Lfe2: 82 .size oktag_from_io,.Lfe2-oktag_from_io 83 .ident "GCC: (GNU) egcs-2.90.29 980515 (egcs-1.0.3 release)" 84 85/* 86 * Exception table. 87 * Second longword shows where to jump when an exception at the addr the first 88 * longword is pointing to is caught. 89 */ 90 91.section __ex_table,"a" 92 .align 2 93oktagon_except: 94 .long exp1,ret1 95 .long exp2,ret2 96 97#else 98 99/* 100The code which follows is for 680x0 based assembler and is meant for 101Linux/m68k. It was created by cross compiling the code using the 102instructions given above. I then added the four labels used in the 103exception handler table at the bottom of this file. 104- Kevin <kcozens@interlog.com> 105*/ 106 107#ifdef CONFIG_AMIGA 108 109 .file "oktagon_io.c" 110 .version "01.01" 111gcc2_compiled.: 112.text 113 .align 2 114.globl oktag_to_io 115 .type oktag_to_io,@function 116oktag_to_io: 117 link.w %a6,#0 118 move.l %d2,-(%sp) 119 move.l 8(%a6),%a1 120 move.l 12(%a6),%d1 121 move.l %d1,%a0 122 move.l 16(%a6),%d0 123 addq.l #3,%d0 124 lsr.l #2,%d0 125 subq.l #1,%d0 126 moveq.l #-1,%d2 127 cmp.l %d0,%d2 128 jbeq .L3 129.L5: 130exp1: 131 move.l (%a0)+,(%a1) 132 dbra %d0,.L5 133 clr.w %d0 134 subq.l #1,%d0 135 jbcc .L5 136.L3: 137ret1: 138 move.l %a0,%d0 139 sub.l %d1,%d0 140 asr.l #2,%d0 141 move.l -4(%a6),%d2 142 unlk %a6 143 rts 144 145.Lfe1: 146 .size oktag_to_io,.Lfe1-oktag_to_io 147 .align 2 148.globl oktag_from_io 149 .type oktag_from_io,@function 150oktag_from_io: 151 link.w %a6,#0 152 move.l %d2,-(%sp) 153 move.l 8(%a6),%d1 154 move.l 12(%a6),%a1 155 move.l %d1,%a0 156 move.l 16(%a6),%d0 157 addq.l #3,%d0 158 lsr.l #2,%d0 159 subq.l #1,%d0 160 moveq.l #-1,%d2 161 cmp.l %d0,%d2 162 jbeq .L9 163.L11: 164exp2: 165 move.l (%a1),(%a0)+ 166 dbra %d0,.L11 167 clr.w %d0 168 subq.l #1,%d0 169 jbcc .L11 170.L9: 171ret2: 172 move.l %a0,%d0 173 sub.l %d1,%d0 174 asr.l #2,%d0 175 move.l -4(%a6),%d2 176 unlk %a6 177 rts 178.Lfe2: 179 .size oktag_from_io,.Lfe2-oktag_from_io 180 .ident "GCC: (GNU) 2.7.2.1" 181 182/* 183 * Exception table. 184 * Second longword shows where to jump when an exception at the addr the first 185 * longword is pointing to is caught. 186 */ 187 188.section __ex_table,"a" 189 .align 2 190oktagon_except: 191 .long exp1,ret1 192 .long exp2,ret2 193 194#endif 195#endif