Introspector/GccCpp/tree-dump.c/char class switch

From Wikibooks, open books for an open world
Jump to navigation Jump to search

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"

Block L29[edit | edit source]

Block L32[edit | edit source]

Block L25[edit | edit source]