Σύγκριση κώδικα CISC / RISC
Κώδικας C
/*
* Print tabs to indent the following character by indent_level
*/
void
indent(void)
{
int i;
for (i = 0; i < indent_level; i++)
putchar('\t');
}
Κώδικας Pentium
Διακρίνουμε τη χρήση ειδικών καταχωρητών και τις σύνθετες εντολές.
indent:
pushl %ebp
movl %esp,%ebp
pushl %ebx
xorl %ebx,%ebx
cmpl indent_level,%ebx
jge .L18
.p2align 4,,7
.L20:
pushl stdout
pushl $9
call _IO_putc
addl $8,%esp
incl %ebx
cmpl indent_level,%ebx
jl .L20
.L18:
movl -4(%ebp),%ebx
leave
ret
Κώδικας ARM
Διακρίνουμε εντολές με τρεις τελεστέους και την πρόσβαση στη μνήμη μέσω
καταχωρητών.
_indent:
@ args = 0, pretend = 0, frame = 0
@ frame_needed = 1, current_function_anonymous_args = 0
mov ip, sp
stmfd sp!, {r4, r5, r6, r7, fp, ip, lr, pc}
ldr r6, L199
ldr r3, [r6, #0]
sub fp, ip, #4
mov r4, #0
cmp r4, r3
ldmgeea fp, {r4, r5, r6, r7, fp, sp, pc}
mov r7, #9
ldr r5, L199+4
L9:
ldr r3, [r5, #8]
sub r2, r3, #1
str r2, [r5, #8]
cmp r2, #0
bge L10
ldr r3, [r5, #24]
cmp r2, r3
blt L11
L10:
ldr r3, [r5, #0]
strb r7, [r3], #1
str r3, [r5, #0]
b L8
L11:
mov r0, #9
mov r1, r5
bl ___swbuf
L8:
ldr r3, [r6, #0]
add r4, r4, #1
cmp r4, r3
blt L9
ldmea fp, {r4, r5, r6, r7, fp, sp, pc}
L200:
.align 0
L199:
.word _indent_level
.word ___sF+88
Lfe3:
.size _indent,Lfe3-_indent
.align 0
Κώδικας SPARC
Διακρίνουμε τη χρήση παραθύρου καταχωρητών εισερχομένων παραμέτρων (i)
τοπικών μεταβλητών (l) και εξερχομένων παραμέτρων (o).
indent__Fv:
.LLFB4:
!#PROLOGUE# 0
save %sp, -112, %sp
.LLCFI3:
!#PROLOGUE# 1
sethi %hi(indent_level), %o0
ld [%o0+%lo(indent_level)], %o1
mov 0, %l0
cmp %l0, %o1
bge .LL10
mov %o0, %l4
sethi %hi(__iob+16), %l2
or %l2, %lo(__iob+16), %l1
mov 9, %l3
ld [%l2+%lo(__iob+16)], %o0
.LL171:
add %o0, -1, %o0
cmp %o0, 0
bge .LL7
st %o0, [%l2+%lo(__iob+16)]
mov 9, %o0
call __flsbuf, 0
mov %l1, %o1
b .LL170
ld [%l4+%lo(indent_level)], %o0
.LL7:
ld [%l1+4], %o0
stb %l3, [%o0]
add %o0, 1, %o0
st %o0, [%l1+4]
ld [%l4+%lo(indent_level)], %o0
.LL170:
add %l0, 1, %l0
cmp %l0, %o0
bl .LL171
ld [%l2+%lo(__iob+16)], %o0
.LL10:
ret
restore