Changeset 104dc0b in mainline for arch/ia32/include/asm.h
- Timestamp:
- 2005-09-18T21:39:56Z (20 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- d9430f7
- Parents:
- 650d976
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
arch/ia32/include/asm.h
r650d976 r104dc0b 139 139 pri_t v; 140 140 __asm__ volatile ( 141 "pushf\n "142 "popl %0\n "141 "pushf\n\t" 142 "popl %0\n\t" 143 143 "sti\n" 144 144 : "=r" (v) … … 155 155 pri_t v; 156 156 __asm__ volatile ( 157 "pushf\n "158 "popl %0\n "157 "pushf\n\t" 158 "popl %0\n\t" 159 159 "cli\n" 160 160 : "=r" (v) … … 169 169 static inline void cpu_priority_restore(pri_t pri) { 170 170 __asm__ volatile ( 171 "pushl %0\n "171 "pushl %0\n\t" 172 172 "popf\n" 173 173 : : "r" (pri) … … 182 182 pri_t v; 183 183 __asm__ volatile ( 184 "pushf\n "184 "pushf\n\t" 185 185 "popl %0\n" 186 186 : "=r" (v) … … 213 213 } 214 214 215 /** Copy memory 216 * 217 * Copy a given number of bytes (3rd argument) 218 * from the memory location defined by 2nd argument 219 * to the memory location defined by 1st argument. 220 * The memory areas cannot overlap. 221 * 222 * @param destination 223 * @param source 224 * @param number of bytes 225 * @return destination 226 */ 227 static inline void * memcpy(void * dst, const void * src, size_t cnt) 228 { 229 __u32 d0, d1, d2; 230 231 __asm__ __volatile__( 232 "rep movsl\n\t" 233 "movl %4, %%ecx\n\t" 234 "andl $3, %%ecx\n\t" 235 "jz 1f\n\t" 236 "rep movsb\n\t" 237 "1:\n" 238 : "=&c" (d0), "=&D" (d1), "=&S" (d2) 239 : "0" (cnt / 4), "g" (cnt), "1" ((__u32) dst), "2" ((__u32) src) 240 : "memory"); 241 242 return dst; 243 } 244 215 245 216 246 #endif
Note:
See TracChangeset
for help on using the changeset viewer.