[阅读: 341] 2007-09-07 10:37:53
int strcmp (char *s1, char *s2) {
int Result;
if (!s1 && !s2) return 0;
if (!s1) return +1;
if (!s2) return -1;
while(*s1 && *s2) {
Result = s1 - s2;
if (Result) return Result;
s1++;
s2++;
}
if (!*s1 && !*s2) return 0;
if (!*s1) return -1;
if (!*s2) return +1;
return 0;
}
int main (int argc, char *argv[]) {
char * s1;
char * s2;
return strcmp(s1, s2);
}
.file "s.c"
.text
.align 2
.global strcmp
.type strcmp, %function
strcmp:
@ args = 0, pretend = 0, frame = 16
@ frame_needed = 1, uses_anonymous_args = 0
mov ip, sp
stmfd sp!, {fp, ip, lr, pc}
sub fp, ip, #4
sub sp, sp, #16
str r0, [fp, #-16]
str r1, [fp, #-20]
ldr r3, [fp, #-16]
cmp r3, #0
bne .L2
ldr r3, [fp, #-20]
cmp r3, #0
bne .L2
mov r3, #0
str r3, [fp, #-28]
b .L1
.L2:
ldr r3, [fp, #-16]
cmp r3, #0
bne .L3
mvn r3, #0
str r3, [fp, #-28]
b .L1
.L3:
ldr r3, [fp, #-20]
cmp r3, #0
bne .L5
mov r3, #1
str r3, [fp, #-28]
b .L1
.L5:
ldr r3, [fp, #-16]
ldrb r3, [r3, #0] @ zero_extendqisi2
cmp r3, #0
beq .L6
ldr r3, [fp, #-20]
ldrb r3, [r3, #0] @ zero_extendqisi2
cmp r3, #0
beq .L6
ldr r2, [fp, #-16]
ldr r3, [fp, #-20]
rsb r3, r3, r2
str r3, [fp, #-24]
ldr r3, [fp, #-24]
cmp r3, #0
beq .L7
ldr r3, [fp, #-24]
str r3, [fp, #-28]
b .L1
.L7:
ldr r3, [fp, #-16]
add r3, r3, #1
str r3, [fp, #-16]
ldr r3, [fp, #-20]
add r3, r3, #1
str r3, [fp, #-20]
b .L5
.L6:
ldr r3, [fp, #-16]
ldrb r3, [r3, #0] @ zero_extendqisi2
cmp r3, #0
bne .L8
ldr r3, [fp, #-20]
ldrb r3, [r3, #0] @ zero_extendqisi2
cmp r3, #0
bne .L8
mov r3, #0
str r3, [fp, #-28]
b .L1
.L8:
ldr r3, [fp, #-16]
ldrb r3, [r3, #0] @ zero_extendqisi2
cmp r3, #0
bne .L9
mvn r3, #0
str r3, [fp, #-28]
b .L1
.L9:
ldr r3, [fp, #-20]
ldrb r3, [r3, #0] @ zero_extendqisi2
cmp r3, #0
bne .L10
mov r3, #1
str r3, [fp, #-28]
b .L1
.L10:
mov r3, #0
str r3, [fp, #-28]
.L1:
ldr r0, [fp, #-28]
sub sp, fp, #12
ldmfd sp, {fp, sp, pc}
.size strcmp, .-strcmp
.align 2
.global main
.type main, %function
main:
@ args = 0, pretend = 0, frame = 16
@ frame_needed = 1, uses_anonymous_args = 0
mov ip, sp
stmfd sp!, {fp, ip, lr, pc}
sub fp, ip, #4
sub sp, sp, #16
str r0, [fp, #-16]
str r1, [fp, #-20]
ldr r0, [fp, #-24]
ldr r1, [fp, #-28]
bl strcmp
mov r3, r0
mov r0, r3
sub sp, fp, #12
ldmfd sp, {fp, sp, pc}
.size main, .-main
.ident "GCC: (GNU) 3.4.1"