[S] Change in osmo-ccid-firmware[master]: 7816 fsm: drop inverse convention lut for arm
laforge has submitted this change. ( https://gerrit.osmocom.org/c/osmo-ccid-firmware/+/40721?usp=email ) Change subject: 7816 fsm: drop inverse convention lut for arm ...................................................................... 7816 fsm: drop inverse convention lut for arm 3 instructions is more reliable than precious bytes and awfully slow memory. Change-Id: I1c6f1c4b733074201cb02c0b9e7cf80a9f8dca7c --- M ccid_common/iso7816_fsm.c 1 file changed, 21 insertions(+), 1 deletion(-) Approvals: laforge: Looks good to me, approved Jenkins Builder: Verified diff --git a/ccid_common/iso7816_fsm.c b/ccid_common/iso7816_fsm.c index 0aa9571..7b0ea5f 100644 --- a/ccid_common/iso7816_fsm.c +++ b/ccid_common/iso7816_fsm.c @@ -149,6 +149,19 @@ static struct osmo_fsm tpdu_fsm; static struct osmo_fsm pps_fsm; +#if defined(__arm__) +#define invert_flip_uint8(XX) \ + do { \ + _Static_assert(__builtin_types_compatible_p(__typeof__(XX), uint8_t), \ + "invert_flip_uint8 argument must be uint8_t"); \ + /* xor to flip done by the compiler, since it might be a mvns instead of eor if convenient, so don't force it manually*/ \ + XX = ~XX; \ + __asm__ volatile("rbit %0, %0\n\t" \ + "uxtb.w %0, %0, ror #24\n\t" \ + : "+r"(XX)::/* lsr clobbers cc, uxtb does not */ \ + ); \ + } while (0) +#else /* look-up table for bit-wise inversion to convert from "inverse convention" to normal */ static const uint8_t convention_convert_lut[256] = { 0xff, 0x7f, 0xbf, 0x3f, 0xdf, 0x5f, 0x9f, 0x1f, 0xef, 0x6f, 0xaf, 0x2f, 0xcf, 0x4f, 0x8f, 0x0f, @@ -168,6 +181,13 @@ 0xf8, 0x78, 0xb8, 0x38, 0xd8, 0x58, 0x98, 0x18, 0xe8, 0x68, 0xa8, 0x28, 0xc8, 0x48, 0x88, 0x08, 0xf0, 0x70, 0xb0, 0x30, 0xd0, 0x50, 0x90, 0x10, 0xe0, 0x60, 0xa0, 0x20, 0xc0, 0x40, 0x80, 0x00, }; +#define invert_flip_uint8(XX) \ + do { \ + _Static_assert(__builtin_types_compatible_p(__typeof__(XX), uint8_t), \ + "invert_flip_uint8 argument must be uint8_t"); \ + XX = convention_convert_lut[XX]; \ + } while (0) +#endif struct atr_fsm_priv { uint8_t hist_len; /*!< store the number of expected historical bytes */ @@ -656,7 +676,7 @@ /* apply inverse convention */ if (ip->convention_convert) - byte = convention_convert_lut[byte]; + invert_flip_uint8(byte); return byte; } -- To view, visit https://gerrit.osmocom.org/c/osmo-ccid-firmware/+/40721?usp=email To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings?usp=email Gerrit-MessageType: merged Gerrit-Project: osmo-ccid-firmware Gerrit-Branch: master Gerrit-Change-Id: I1c6f1c4b733074201cb02c0b9e7cf80a9f8dca7c Gerrit-Change-Number: 40721 Gerrit-PatchSet: 3 Gerrit-Owner: Hoernchen <ewild@sysmocom.de> Gerrit-Reviewer: Jenkins Builder Gerrit-Reviewer: laforge <laforge@osmocom.org>
participants (1)
-
laforge