@@ -5128,10 +5128,10 @@ impl Emu {
51285128 } ;
51295129
51305130 let res: u64 = match self . get_operand_sz ( & ins, 1 ) {
5131- 64 => self . flags . add64 ( value0, value1) , // TODO: cf as separate argument
5132- 32 => self . flags . add32 ( value0, value1) , // TODO: cf as separate argument
5133- 16 => self . flags . add16 ( value0, value1) , // TODO: cf as separate argument
5134- 8 => self . flags . add8 ( value0, value1, self . flags . f_cf ) ,
5131+ 64 => self . flags . add64 ( value0, value1) ,
5132+ 32 => self . flags . add32 ( value0, value1) ,
5133+ 16 => self . flags . add16 ( value0, value1) ,
5134+ 8 => self . flags . add8 ( value0, value1) ,
51355135 _ => unreachable ! ( "weird size" ) ,
51365136 } ;
51375137
@@ -5142,37 +5142,35 @@ impl Emu {
51425142
51435143 Mnemonic :: Adc => {
51445144 self . show_instruction ( & self . colors . cyan , & ins) ;
5145-
5145+
51465146 assert ! ( ins. op_count( ) == 2 ) ;
5147-
5148- // Get current carry flag value
5149- let cf = if self . flags . f_cf { 1 } else { 0 } ;
5150-
5151- // Get the size first to ensure consistent handling
5152- let size = self . get_operand_sz ( & ins , 1 ) ;
5153-
5154- // Get destination value (first operand)
5155- let dest = match self . get_operand_value ( & ins, 0 , true ) {
5147+
5148+ let cf : u64 ;
5149+ if self . flags . f_cf {
5150+ cf = 1
5151+ } else {
5152+ cf = 0 ;
5153+ }
5154+
5155+ let value0 = match self . get_operand_value ( & ins, 0 , true ) {
51565156 Some ( v) => v,
51575157 None => return false ,
51585158 } ;
5159-
5160- // Get source value (second operand)
5161- let src = match self . get_operand_value ( & ins, 1 , true ) {
5159+
5160+ let value1 = match self . get_operand_value ( & ins, 1 , true ) {
51625161 Some ( v) => v,
51635162 None => return false ,
51645163 } ;
5165-
5166- // Do the addition with carry
5167- let res = match size {
5168- 64 => self . flags . add64 ( dest , src + cf) , // TODO: cf as separate argument
5169- 32 => self . flags . add32 ( dest , src + cf) , // TODO: cf as separate argument
5170- 16 => self . flags . add16 ( dest , src + cf) , // TODO: cf as separate argument
5171- 8 => self . flags . add8 ( dest , src , self . flags . f_cf ) ,
5164+
5165+ let res : u64 ;
5166+ match self . get_operand_sz ( & ins , 1 ) {
5167+ 64 => res = self . flags . add64 ( value0 , value1 + cf) ,
5168+ 32 => res = self . flags . add32 ( value0 , value1 + cf) ,
5169+ 16 => res = self . flags . add16 ( value0 , value1 + cf) ,
5170+ 8 => res = self . flags . add8 ( value0 , value1 + cf ) ,
51725171 _ => unreachable ! ( "weird size" ) ,
5173- } ;
5174-
5175- // Set the result
5172+ }
5173+
51765174 if !self . set_operand_value ( & ins, 0 , res) {
51775175 return false ;
51785176 }
@@ -6588,10 +6586,10 @@ impl Emu {
65886586 }
65896587
65906588 let res: u64 = match self . get_operand_sz ( & ins, 1 ) {
6591- 64 => self . flags . add64 ( value0, value1) , // TODO: cf as separate argument
6592- 32 => self . flags . add32 ( value0, value1) , // TODO: cf as separate argument
6593- 16 => self . flags . add16 ( value0, value1) , // TODO: cf as separate argument
6594- 8 => self . flags . add8 ( value0, value1, self . flags . f_cf ) ,
6589+ 64 => self . flags . add64 ( value0, value1) ,
6590+ 32 => self . flags . add32 ( value0, value1) ,
6591+ 16 => self . flags . add16 ( value0, value1) ,
6592+ 8 => self . flags . add8 ( value0, value1) ,
65956593 _ => unreachable ! ( "weird size" ) ,
65966594 } ;
65976595
0 commit comments