/*void update_afr_target_final(const struct *ptr)*/
   23e6c:	2e 7f 2b 7f 	push lr -> push r11		#-
   23e70:	2a 7f 29 7f 	push r10 -> push r9		#-
   23e74:	28 7f 19 80 	push r8 -> mv r9,r0		#-
   23e78:	40 04 21 c0 	addi r0,#4 -> ld r1,@r0		#-
   23e7c:	22 b1 52 54 	lduh r2,@r1 -> slli r2,#0x14	#-
   23e80:	02 92 7d 03 	addx r2,r2 -> bnc 0x23e8c	# if (*ptr->run_state_flags & 0x0800) {//closed loop
   23e84:	a0 c9 00 d4 	ld r0,@(212,r9)			#	r8 = *ptr->fuel_map_afr_corrected;
   23e88:	28 b0 7f 74 	lduh r8,@r0 -> bra 0x24058	#	goto exit;
   23e8c:	a0 bd cf 92 	lduh r0,@(-12398,fp)		# }
   23e90:	50 55 00 90 	slli r0,#0x15 -> addx r0,r0	#-
   23e94:	7d 12 f0 00 	bnc 0x23edc || nop		# if (afr_correction_flags & 0x0400) {//not used
   23e98:	a5 bd cd ce 	lduh r5,@(-12850,fp)		#-
   23e9c:	e4 00 09 b6 	ld24 r4,0x9b6			#-
   23ea0:	21 b4 12 85 	lduh r1,@r4 -> mv r2,r5		#-
   23ea4:	52 50 52 10 	slli r2,#0x10 -> srli r2,#0x10	#-
   23ea8:	02 51 7d 02 	cmpu r2,r1 -> bnc 0x23eb0	#-
   23eac:	95 f0 00 80 	ldi r5,#128			#	r5 = adc_byte_o2_front < flash_closed_loop_o2_front_min_used ? 128 : adc_byte_o2_front;
   23eb0:	e4 00 09 b4 	ld24 r4,0x9b4			#-
   23eb4:	22 b4 f0 00 	lduh r2,@r4 || nop		#-
   23eb8:	e6 00 09 b2 	ld24 r6,0x9b2			#-
   23ebc:	21 b6 10 85 	lduh r1,@r6 -> mv r0,r5		#-
   23ec0:	fe 00 ac 7e 	bl 0x4f0b8			#	ret = mid16(r5, flash_closed_loop_o2_front_max, flash_closed_loop_o2_front_min);//[26,230]
   23ec4:	80 c0 ff ff 	and3 r0,r0,#0xffff		#-
   23ec8:	50 02 f0 00 	srli r0,#0x2 || nop		#-
   23ecc:	e4 00 09 b0 	ld24 r4,0x9b0			#-
   23ed0:	21 b4 00 a1 	lduh r1,@r4 -> add r0,r1	#-
   23ed4:	fe 00 ac 70 	bl 0x4f094			#	r8 = s_16to8(ret / 4 + flash_closed_loop_o2_front_base);//[11.68, 17.10] afr
   23ed8:	18 80 7f 19 	mv r8,r0 -> bra 0x23f3c		# } else {
   23edc:	a8 bd cf fc 	lduh r8,@(-12292,fp)		#	r8 = fuel_map_target_afr;
   23ee0:	a0 bd cf 92 	lduh r0,@(-12398,fp)		#-
   23ee4:	50 51 00 90 	slli r0,#0x11 -> addx r0,r0	#-
   23ee8:	7d 0c f0 00 	bnc 0x23f18 || nop		#	if ((afr_correction_flags & 0x4000)
   23eec:	fe 00 35 39 	bl 0x313d0			#-
   23ef0:	80 c0 ff ff 	and3 r0,r0,#0xffff		#-
   23ef4:	b0 90 00 09 	bnez r0,0x23f18			#	&& !test_disable_knock_enrichment()) {//0
   23ef8:	e4 00 0b 0e 	ld24 r4,0xb0e			#-
   23efc:	21 b4 f0 00 	lduh r1,@r4 || nop		#-
   23f00:	a0 bd d1 64 	lduh r0,@(-11932,fp)		#-
   23f04:	fe 00 ae 9f 	bl 0x4f980			#-
   23f08:	e4 00 0b 10 	ld24 r4,0xb10			#-
   23f0c:	21 b4 10 61 	lduh r1,@r4 -> mul r0,r1	#-
   23f10:	fe 00 ad 0b 	bl 0x4f33c			#-
   23f14:	08 a0 f0 00 	add r8,r0 || nop		#		r8 += conv8f8_uint(s_sub16(knock_sum, flash_knock_sum_enrichment_threshold) * flash_knock_sum_enrichment_multiplier);
   23f18:	e4 00 03 0a 	ld24 r4,0x30a			#	}
   23f1c:	20 94 f0 00 	ldub r0,@r4 || nop		#-
   23f20:	b0 80 00 07 	beqz r0,0x23f3c			#	if (flash_enable_heavy_mode_enrichment //0
   23f24:	a0 bd cc 7e 	lduh r0,@(-13186,fp)		#-
   23f28:	b0 90 00 05 	bnez r0,0x23f3c			#	&& !decays_x4.heavy_mode_delay) {
   23f2c:	e5 00 0d 70 	ld24 r5,0xd70			#-
   23f30:	21 b5 10 88 	lduh r1,@r5 -> mv r0,r8		#-
   23f34:	fe 00 ac c2 	bl 0x4f23c			#		r8 = ps_scale_base128(r8, flash_heavy_mode_enrichment);//0x8d
   23f38:	18 80 f0 00 	mv r8,r0 || nop			#	}
   23f3c:	a0 bd cf 3a 	lduh r0,@(-12486,fp)		# }
   23f40:	50 5e 00 90 	slli r0,#0x1e -> addx r0,r0	#-
   23f44:	7d 05 f0 00 	bnc 0x23f58 || nop		# if (fp12486_f16 & 0x02) {//disabled via mode
   23f48:	e4 00 0a 5a 	ld24 r4,0xa5a			#-
   23f4c:	20 b4 00 a8 	lduh r0,@r4 -> add r0,r8	#-
   23f50:	fe 00 ac 51 	bl 0x4f094			#-
   23f54:	18 80 f0 00 	mv r8,r0 || nop			#	r8 = s_16to8(flash_high_speed_cruise_enrichment + r8);
   23f58:	e4 00 0a 7e 	ld24 r4,0xa7e			# }
   23f5c:	20 b4 11 88 	lduh r0,@r4 -> mv r1,r8		#-
   23f60:	51 50 51 10 	slli r1,#0x10 -> srli r1,#0x10	#-
   23f64:	01 50 7c 02 	cmpu r1,r0 -> bc 0x23f6c	#-
   23f68:	28 b4 f0 00 	lduh r8,@r4 || nop		# r8 = MIN16(r8, flash_afr_basic_rich_limit);//limits AFR >= 9.3
   23f6c:	a0 bd cf 92 	lduh r0,@(-12398,fp)		#-
   23f70:	50 54 00 90 	slli r0,#0x14 -> addx r0,r0	#-
   23f74:	7d 03 10 88 	bnc 0x23f80 -> mv r0,r8		# if (afr_correction_flags & 0x0800)
   23f78:	7e 3f f0 00 	bl 0x24074 || nop		#-
   23f7c:	18 80 f0 00 	mv r8,r0 || nop			#	r8 = lean_spool_correction(r8);
   23f80:	a0 bd cf 92 	lduh r0,@(-12398,fp)		#-
   23f84:	50 57 00 90 	slli r0,#0x17 -> addx r0,r0	#-
   23f88:	7d 06 f0 00 	bnc 0x23fa0 || nop		# if (afr_correction_flags & 0x0100) {
   23f8c:	e4 00 09 ca 	ld24 r4,0x9ca			#-
   23f90:	21 b4 12 88 	lduh r1,@r4 -> mv r2,r8		#-
   23f94:	52 50 52 10 	slli r2,#0x10 -> srli r2,#0x10	#-
   23f98:	02 51 7d 02 	cmpu r2,r1 -> bnc 0x23fa0	#-
   23f9c:	28 b4 f0 00 	lduh r8,@r4 || nop		#	r8 = MAX16(r8, flash_overheat_protection_afr_lean_limit);//limit AFR <= 12.8 to prevent overheat
   23fa0:	a0 c9 00 14 	ld r0,@(20,r9)			# }
   23fa4:	21 b0 51 5c 	lduh r1,@r0 -> slli r1,#0x1c	#-
   23fa8:	01 91 7d 11 	addx r1,r1 -> bnc 0x23fec	# if (*ptr->afr_correction_flags & 0x08) {//after hot start lean limit
   23fac:	e5 00 0d 44 	ld24 r5,0xd44			#-
   23fb0:	24 b5 62 14 	lduh r4,@r5 -> ldi r2,#20	#-
   23fb4:	14 62 1b 84 	mul r4,r2 -> mv r11,r4		#	r4 = flash_hot_start_rpm_age_max * 20;
   23fb8:	5b 42 f0 00 	slli r11,#0x2 || nop		#-
   23fbc:	a1 bd c8 f8 	lduh r1,@(-14088,fp)		#-
   23fc0:	10 84 f0 00 	mv r0,r4 || nop			#-
   23fc4:	fe 00 ae 6f 	bl 0x4f980			#-
   23fc8:	12 8b f0 00 	mv r2,r11 || nop		#-
   23fcc:	e4 00 0d 40 	ld24 r4,0xd40			#-
   23fd0:	21 b4 f0 00 	lduh r1,@r4 || nop		#-
   23fd4:	fe 00 ac 68 	bl 0x4f174			#-
   23fd8:	8a a0 00 80 	add3 r10,r0,#128		#	r10 = ps_mul_divu16(s_sub16(r4, age_x1.rpm), flash_hot_start_lean_limit_correction, r4 * 4) + 128;
   23fdc:	81 c8 ff ff 	and3 r1,r8,#0xffff		#-
   23fe0:	82 ca ff ff 	and3 r2,r10,#0xffff		#-
   23fe4:	02 51 7c 02 	cmpu r2,r1 -> bc 0x23fec	#-
   23fe8:	18 8a f0 00 	mv r8,r10 || nop		#	r8 = MAX16(r8, r10);
   23fec:	a0 bd cf 04 	lduh r0,@(-12540,fp)		# }
   23ff0:	50 5c 00 90 	slli r0,#0x1c -> addx r0,r0	#-
   23ff4:	7d 09 f0 00 	bnc 0x24018 || nop		# if ((mode_flags[3] & 0x08)//enabled
   23ff8:	a1 c9 00 b0 	ld r1,@(176,r9)			#-
   23ffc:	22 b1 52 56 	lduh r2,@r1 -> slli r2,#0x16	#-
   24000:	02 92 7d 06 	addx r2,r2 -> bnc 0x24018	# && (*ptr->fp10192_f16 & 0x0200)) {/*according to cheatsheet it may be o2 sensor high fault*/
   24004:	e4 00 12 7a 	ld24 r4,0x127a			#-
   24008:	23 b4 15 88 	lduh r3,@r4 -> mv r5,r8		#-
   2400c:	55 50 55 10 	slli r5,#0x10 -> srli r5,#0x10	#-
   24010:	05 53 7d 02 	cmpu r5,r3 -> bnc 0x24018	#	r8 = MAX(r8,flash127a_u16);//AFR lean limit to 12.8
   24014:	28 b4 f0 00 	lduh r8,@r4 || nop		#-
   24018:	a0 bd cf 7c 	lduh r0,@(-12420,fp)		# }
   2401c:	50 50 00 90 	slli r0,#0x10 -> addx r0,r0	#-
   24020:	7d 06 f0 00 	bnc 0x24038 || nop		# if (fp12420_f16 & 0x8000) {//never set
   24024:	e4 00 17 d2 	ld24 r4,0x17d2			#-
   24028:	21 b4 12 88 	lduh r1,@r4 -> mv r2,r8		#-
   2402c:	52 50 52 10 	slli r2,#0x10 -> srli r2,#0x10	#	r8 = MAX(r8, flash17d2_u16); //AFR lean limit to 12.46
   24030:	02 51 7d 02 	cmpu r2,r1 -> bnc 0x24038	#-
   24034:	28 b4 f0 00 	lduh r8,@r4 || nop		#-
   24038:	a0 bd cf 7c 	lduh r0,@(-12420,fp)		# }
   2403c:	50 52 00 90 	slli r0,#0x12 -> addx r0,r0	#-
   24040:	7d 06 f0 00 	bnc 0x24058 || nop		# if (fp12420_f16 & 0x2000) {//out of engine braking
   24044:	e4 00 23 1e 	ld24 r4,0x231e			#-
   24048:	21 b4 12 88 	lduh r1,@r4 -> mv r2,r8		#-
   2404c:	52 50 52 10 	slli r2,#0x10 -> srli r2,#0x10	#-
   24050:	02 51 7d 02 	cmpu r2,r1 -> bnc 0x24058	#	r8 = MAX(r8,flash231e_u16);//AFR <= 12.46
   24054:	28 b4 f0 00 	lduh r8,@r4 || nop		#-
   24058:	10 88 f0 00 	mv r0,r8 || nop			# } exit:
   2405c:	fe 00 34 65 	bl 0x311f0			#-
   24060:	a1 c9 00 50 	ld r1,@(80,r9)			#-
   24064:	20 21 28 ef 	sth r0,@r1 -> pop r8		# *ptr->afr_target_final = test_substitute_afr_target_final(r8);
   24068:	29 ef 2a ef 	pop r9 -> pop r10		#-
   2406c:	2b ef 2e ef 	pop r11 -> pop lr		#-
   24070:	1f ce f0 00 	jmp lr || nop			#-
