411 REFERENCE · Wikibooks
Introspector/GccCpp/tree-dump.c/char class switch
Reference material by Wikibooks contributors. This retains its source identity and is not 411 news reporting.
If we look at the assembly the switch for the node class, we will see the following :
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"
Block L31
L31:
cmpb $60, -257(%ebp) #,
je L25 #,
jmp L29 #
Jump to #Block L25 if we have a "<"
else
jump to #Block L29
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"
Block L29
Block L32
Block L25