Может вопрос и не сюда, но почему так? Зачем во втором случаи две лишних операции ведь старшая половина 32 разрядного регистра должна = 0!!
32 разрадное слово:
void inline l_32w( unsigned int data, unsigned int addr){
*(unsigned int *)addr = (unsigned int)data;
}
@ Generated by gcc 2.95.3 20010315 (release) for ARM/elf
.file "32w.c"
gcc2_compiled.:
.text
.align 2
.global l_32w
.type l_32w,function
l_32w:
@ args = 0, pretend = 0, frame = 0
@ frame_needed = 1, current_function_anonymous_args = 0
mov ip, sp
stmfd sp!, {fp, ip, lr, pc}
sub fp, ip, #4
str r0, [r1, #0]
ldmea fp, {fp, sp, pc}
.Lfe1:
.size l_32w,.Lfe1-l_32w
.ident "GCC: (GNU) 2.95.3 20010315 (release)"
16 разрядное слово как 32 разрядное:
void inline l_32h( unsigned short data, unsigned int addr){
*(unsigned int *)addr = (unsigned int)data;
}
@ Generated by gcc 2.95.3 20010315 (release) for ARM/elf
.file "32h.c"
gcc2_compiled.:
.text
.align 2
.global l_32h
.type l_32h,function
l_32h:
@ args = 0, pretend = 0, frame = 0
@ frame_needed = 1, current_function_anonymous_args = 0
mov ip, sp
stmfd sp!, {fp, ip, lr, pc}
sub fp, ip, #4
mov r0, r0, asl #16
mov r0, r0, lsr #16
str r0, [r1, #0]
ldmea fp, {fp, sp, pc}
.Lfe1:
.size l_32h,.Lfe1-l_32h
.ident "GCC: (GNU) 2.95.3 20010315 (release)"
-
- такой компилятор :) MemoryTest(97 знак., 28.11.2005 12:23, )