Changeset 45f7449 in mainline for kernel/arch
- Timestamp:
- 2013-03-31T19:46:19Z (13 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- a5057cc
- Parents:
- 582f4d28
- Location:
- kernel/arch
- Files:
-
- 3 edited
-
amd64/src/asm.S (modified) (3 diffs)
-
ia32/src/asm.S (modified) (3 diffs)
-
mips32/src/asm.S (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
kernel/arch/amd64/src/asm.S
r582f4d28 r45f7449 37 37 .global read_efer_flag 38 38 .global set_efer_flag 39 .global memset40 .global memcpy41 39 .global memcpy_from_uspace 42 40 .global memcpy_to_uspace … … 45 43 .global early_putchar 46 44 47 #define MEMSET_DST %rdi48 #define MEMSET_VAL %rsi49 #define MEMSET_SIZE %rdx50 51 45 #define MEMCPY_DST %rdi 52 46 #define MEMCPY_SRC %rsi 53 47 #define MEMCPY_SIZE %rdx 54 48 55 /* Fill memory with byte pattern 56 * 57 * This is a conventional memset(). 58 * 59 * @param MEMSET_DST Destination address. 60 * @param MEMSET_VAL Value to fill. 61 * @param MEMSET_SIZE Size. 62 * 63 * @return MEMSET_DST. 64 * 65 */ 66 memset: 67 movq MEMSET_DST, %r8 /* save %rdi */ 68 69 /* Create byte pattern */ 70 movzbl %sil, %esi /* MEMSET_VAL */ 71 movabs $0x0101010101010101, %rax 72 imulq %rsi, %rax 73 74 movq MEMSET_SIZE, %rcx 75 shrq $3, %rcx /* size / 8 */ 76 77 rep stosq /* store as much as possible word by word */ 78 79 movq MEMSET_SIZE, %rcx 80 andq $7, %rcx /* size % 8 */ 81 jz 0f 82 83 rep stosb /* store the rest byte by byte */ 84 85 0: 86 movq %r8, %rax 87 ret /* return MEMCPY_SRC, success */ 88 89 /** Copy memory from/to userspace. 49 /** 50 * Copy memory from/to userspace. 90 51 * 91 52 * This is almost conventional memcpy(). … … 102 63 * 103 64 */ 104 memcpy:105 65 memcpy_from_uspace: 106 66 memcpy_to_uspace: -
kernel/arch/ia32/src/asm.S
r582f4d28 r45f7449 38 38 .global paging_on 39 39 .global enable_l_apic_in_msr 40 .global memset41 .global memcpy42 40 .global memcpy_from_uspace 43 41 .global memcpy_from_uspace_failover_address … … 46 44 .global early_putchar 47 45 48 #define MEMSET_DST 449 #define MEMSET_VAL 850 #define MEMSET_SIZE 1251 52 46 #define MEMCPY_DST 4 53 47 #define MEMCPY_SRC 8 54 48 #define MEMCPY_SIZE 12 55 56 /* Fill memory with byte pattern57 *58 * This is a conventional memset().59 *60 * @param MEMSET_DST(%esp) Destination address.61 * @param MEMSET_VAL(%esp) Value to fill.62 * @param MEMSET_SIZE(%esp) Size.63 *64 * @return MEMSET_DST(%esp).65 *66 */67 memset:68 movl %edi, %edx /* save %edi */69 70 movl MEMSET_DST(%esp), %edi71 movl MEMSET_VAL(%esp), %ecx72 73 /* Create byte pattern */74 movb %cl, %ch75 movw %cx, %ax76 shll $16, %eax77 orw %cx, %ax78 79 movl MEMSET_SIZE(%esp), %ecx80 shrl $2, %ecx /* size / 4 */81 82 /* Write whole words */83 rep stosl84 85 movl MEMSET_SIZE(%esp), %ecx86 andl $3, %ecx /* size % 4 */87 jz 0f88 89 /* Copy the rest byte by byte */90 rep stosb91 92 0:93 94 movl %edx, %edi95 96 /* MEMSET_DST(%esp), success */97 movl MEMSET_DST(%esp), %eax98 ret99 49 100 50 /** Copy memory to/from userspace. … … 113 63 * 114 64 */ 115 memcpy:116 65 memcpy_from_uspace: 117 66 memcpy_to_uspace: -
kernel/arch/mips32/src/asm.S
r582f4d28 r45f7449 57 57 nop 58 58 59 .global memset60 .global memcpy61 59 .global memcpy_from_uspace 62 60 .global memcpy_to_uspace 63 61 .global memcpy_from_uspace_failover_address 64 62 .global memcpy_to_uspace_failover_address 65 66 memset:67 move $v0, $a068 beqz $a2, 0f69 addiu $t1, $a2, -170 71 negu $t0, $a072 andi $t0, $t0, 0x373 sltu $v1, $a2, $t074 bnez $v1, 1f75 andi $a1, $a1, 0xff76 77 7:78 sltiu $v1, $a2, 479 beqz $v1, 2f80 move $v1, $v081 82 move $t0, $a283 84 3:85 sb $a1, 0($v1)86 addiu $v1, $v1, 187 subu $a3, $v1, $v088 sltu $a3, $a3, $t089 bnez $a3, 3b90 addiu $t1, $t1, -191 92 beq $a2, $t0, 0f93 subu $a2, $a2, $t094 95 8:96 srl $a0, $a2, 0x297 sll $t4, $a0, 0x298 beqz $t4, 4f99 sll $t2, $a1, 0x10100 101 sll $t3, $a1, 0x8102 or $t3, $a1, $t3103 sll $a3, $a1, 0x18104 or $t3, $t3, $t2105 or $t3, $t3, $a3106 addu $t0, $v0, $t0107 move $a3, $zero108 109 5:110 addiu $a3, $a3, 1111 sltu $t2, $a3, $a0112 sw $t3, 0($t0)113 bnez $t2, 5b114 addiu $t0, $t0, 4115 116 addu $v1, $v1, $t4117 beq $a2, $t4, 0f118 subu $t1, $t1, $t4119 120 4:121 addiu $t1, $t1, 1122 addu $t1, $v1, $t1123 sb $a1, 0($v1)124 125 6:126 addiu $v1, $v1, 1127 bnel $v1, $t1, 6b128 sb $a1, 0($v1)129 130 0:131 jr $ra132 nop133 134 1:135 j 7b136 move $t0, $a2137 138 2:139 bnez $t0, 3b140 nop141 142 j 8b143 subu $a2, $a2, $t0144 145 memcpy:146 63 memcpy_from_uspace: 147 64 memcpy_to_uspace:
Note:
See TracChangeset
for help on using the changeset viewer.
