Changeset 0ca441c in mainline
- Timestamp:
- 2013-03-29T16:57:20Z (12 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 26346bd
- Parents:
- 8a5a902
- Files:
-
- 1 added
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/arch/amd64/src/asm.S
r8a5a902 r0ca441c 37 37 .global read_efer_flag 38 38 .global set_efer_flag 39 .global memset 40 .global memcpy 39 41 .global memcpy_from_uspace 40 42 .global memcpy_to_uspace … … 43 45 .global early_putchar 44 46 47 #define MEMSET_DST %rdi 48 #define MEMSET_VAL %rsi 49 #define MEMSET_SIZE %rdx 50 45 51 #define MEMCPY_DST %rdi 46 52 #define MEMCPY_SRC %rsi 47 53 #define MEMCPY_SIZE %rdx 48 54 49 /** 50 * Copy memory from/to userspace. 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. 51 90 * 52 91 * This is almost conventional memcpy(). … … 63 102 * 64 103 */ 104 memcpy: 65 105 memcpy_from_uspace: 66 106 memcpy_to_uspace: -
uspace/lib/c/arch/amd64/Makefile.inc
r8a5a902 r0ca441c 28 28 29 29 ARCH_SOURCES = \ 30 arch/$(UARCH)/src/asm.S \ 30 31 arch/$(UARCH)/src/entry.s \ 31 32 arch/$(UARCH)/src/entryjmp.s \
Note:
See TracChangeset
for help on using the changeset viewer.