Introspector/GccCpp/tree-dump.c/char class switch
Appearance
< Introspector | GccCpp
If we look at the assembly the switch for the node class, we will see the following :
Block L5
[edit | edit source]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
[edit | edit source]L31: cmpb $60, -257(%ebp) #, je L25 #, jmp L29 #
Jump to #Block L25 if we have a "<" else jump to #Block L29
Block L30
[edit | edit source]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"