Introspector/GccCpp/tree-dump.c/char class switch
From Wikibooks, open books for an open world
< Introspector | GccCpp
If we look at the assembly the switch for the node class, we will see the following :
Contents |
[edit] Block L5
L5:
subl $12, %esp #,
leal -56(%ebp), %eax #, tmp119
pushl %eax # tmp119
call TReftree_code_class::operator char() #
addl $4, %esp #,
movsbl %al,%eax # tmp120, tmp121
pushl %eax # tmp121
call IS_EXPR_CODE_CLASS(char) #
addl $16, %esp #,
testb %al, %al # tmp122
je L21 #,
subl $8, %esp #,
pushl -24(%ebp) # t
pushl 8(%ebp) # di
call queue_and_dump_type(dump_info*, tree_common*) #
addl $16, %esp #,
subl $12, %esp #,
leal -56(%ebp), %eax #, tmp132
pushl %eax # tmp132
call TReftree_code_class::operator char() #
addl $16, %esp #,
movb %al, -257(%ebp) #,
cmpb $101, -257(%ebp) #, "e"
je L32 #,
Jump to #Block L32 if we are equal to a "e"
cmpb $101, -257(%ebp) #,
jg L30 #,
Jump to #Block L30 if we are greater than a "e"
cmpb $50, -257(%ebp) #,
je L25 #,
Jump to block #Block L25 if we are equal to a "2"
cmpb $50, -257(%ebp) #, // 2
jg L31 #,
Jump to block #Block L31 if we are greater than a "2"
cmpb $49, -257(%ebp) #, // '1'
je L23 #, // case '1'
jmp L29 #
Jump to block #Block L29 if we have a "1"
[edit] Block L31
L31:
cmpb $60, -257(%ebp) #,
je L25 #,
jmp L29 #
Jump to #Block L25 if we have a "<" else jump to #Block L29
[edit] Block L30
L30:
movb -257(%ebp), %al #, tmp134
subl $114, %eax #, tmp134
cmpb $1, %al #, tmp134
ja L29 #,
jmp L32 #\
Subtract "r" from the eax
Jump to #Block L29 Jump Above
Jump to #Block L32 if we are equal to a "e"
This page may need to be