DWord dw_depth;
DWord dw_value;
QWord qw_value;
+ QWord qw_temp;
Int64 ii_value;
+ Int64 ii_temp;
LibGoblin_DWARF_Expression_Stack
t_stack[LIBGOBLIN_DWARF_EXPRESSION_STACK_DEPTH];
t_stack[dw_depth].b_flag = LIBGOBLIN_DWARF_STACK_SIGN; \
dw_depth++; }
#define POP_DWARF() t_stack[dw_depth--].value.qw_value
+#define POP_DWARF_SIGN() t_stack[dw_depth--].value.ii_value
// ------------------------
if( NULL == p_exp ) {
qw_value = t_stack[dw_depth - 1].value.qw_value;
PUSH_DWARF( qw_value );
break;
+
case DW_OP_drop: // 0x13
if( 0 == dw_depth )
{ goto goto_DWARF_Expression_Evaluate_post; }
qw_value = POP_DWARF();
break;
+
case DW_OP_over: // 0x14
if( 2 > dw_depth )
{ goto goto_DWARF_Expression_Evaluate_post; }
qw_value = t_stack[dw_value].value.qw_value;
PUSH_DWARF( qw_value );
break;
+
case DW_OP_pick: // 0x15
// 2019/09/02 Lunch-Coding (Required TEST!!)
b_value = *pb_now++;
qw_value = t_stack[dw_value].value.qw_value;
PUSH_DWARF( qw_value );
break;
+
case DW_OP_swap: // 0x16
+ // 2019/09/03 Lunch-Coding (Required TEST!!)
+ if( 2 > dw_depth )
+ { goto goto_DWARF_Expression_Evaluate_post; }
+ qw_value = t_stack[dw_depth - 2].value.qw_value;
+ t_stack[dw_depth - 2].value.qw_value
+ = t_stack[dw_depth - 1].value.qw_value;
+ t_stack[dw_depth - 1].value.qw_value = qw_value;
break;
+
case DW_OP_rot: // 0x17
+ // 2019/09/03 Lunch-Coding (Required TEST!!)
+ if( 3 > dw_depth )
+ { goto goto_DWARF_Expression_Evaluate_post; }
+ qw_value = t_stack[dw_depth - 1].value.qw_value;
+ t_stack[dw_depth - 1].value.qw_value
+ = t_stack[dw_depth - 2].value.qw_value;
+ t_stack[dw_depth - 2].value.qw_value
+ = t_stack[dw_depth - 3].value.qw_value;
+ t_stack[dw_depth - 3].value.qw_value = qw_value;
break;
+
case DW_OP_xderef: // 0x18
break;
+
case DW_OP_abs: // 0x19
+ // 2019/09/03 Lunch-Coding (Required TEST!!)
+ if( 0 == dw_depth )
+ { goto goto_DWARF_Expression_Evaluate_post; }
+ if( LIBGOBLIN_DWARF_STACK_SIGN == t_stack[dw_depth].b_flag ) {
+ ii_value = POP_DWARF_SIGN();
+ if( 0 > ii_value ) { ii_value *= -1; }
+ PUSH_DWARF_SIGN( ii_value );
+ }
break;
+
case DW_OP_and: // 0x1a
+ // 2019/09/03 Lunch-Coding (Required TEST!!)
+ if( 2 > dw_depth )
+ { goto goto_DWARF_Expression_Evaluate_post; }
+
+ qw_value = POP_DWARF();
+ qw_temp = POP_DWARF();
+ qw_value &= qw_temp;
+ PUSH_DWARF( qw_value );
break;
+
case DW_OP_div: // 0x1b
+ // 2019/09/03 Lunch-Coding (Required TEST!!)
+ if( 2 > dw_depth )
+ { goto goto_DWARF_Expression_Evaluate_post; }
+
+ ii_temp = POP_DWARF_SIGN();
+ ii_value = POP_DWARF_SIGN();
+ if( 0 == ii_temp )
+ { goto goto_DWARF_Expression_Evaluate_post; }
+
+ ii_value /= ii_temp;
+ PUSH_DWARF_SIGN( ii_value );
break;
+
case DW_OP_minus: // 0x1c
break;
case DW_OP_mod: // 0x1d
case DW_OP_not: // 0x20
break;
case DW_OP_or: // 0x21
+ // 2019/09/03 Lunch-Coding (Required TEST!!)
+ if( 2 > dw_depth )
+ { goto goto_DWARF_Expression_Evaluate_post; }
+
+ qw_value = POP_DWARF();
+ qw_temp = POP_DWARF();
+ qw_value |= qw_temp;
+ PUSH_DWARF( qw_value );
break;
+
case DW_OP_plus: // 0x22
break;
case DW_OP_plus_uconst: // 0x23