diff options
author | Øyvind Harboe <oyvind.harboe@zylin.com> | 2009-12-10 15:00:19 +0100 |
---|---|---|
committer | Øyvind Harboe <oyvind.harboe@zylin.com> | 2009-12-11 09:17:23 +0100 |
commit | 068626fde4590a3d3e5e7a80a3ac07adb53b9b48 (patch) | |
tree | c3e4d18c38c825256a6e13a161d5f8a1b01efa4e /src/target/arm_jtag.h | |
parent | a34345451deaa952b8b868d2dd74954035f503c5 (diff) |
embedded hosts: optimize common code path for core arm operations
avoid fn call for the if check on whether anything needs
to be done.
Signed-off-by: Øyvind Harboe <oyvind.harboe@zylin.com>
Diffstat (limited to 'src/target/arm_jtag.h')
-rw-r--r-- | src/target/arm_jtag.h | 37 |
1 files changed, 34 insertions, 3 deletions
diff --git a/src/target/arm_jtag.h b/src/target/arm_jtag.h index 6f03fc6e..cf230b43 100644 --- a/src/target/arm_jtag.h +++ b/src/target/arm_jtag.h @@ -36,9 +36,40 @@ struct arm_jtag uint32_t intest_instr; }; -int arm_jtag_set_instr(struct arm_jtag *jtag_info, - uint32_t new_instr, void *verify_capture); -int arm_jtag_scann(struct arm_jtag *jtag_info, uint32_t new_scan_chain); +int arm_jtag_set_instr_inner(struct arm_jtag *jtag_info, uint32_t new_instr, void *no_verify_capture); +static inline int arm_jtag_set_instr(struct arm_jtag *jtag_info, + uint32_t new_instr, void *no_verify_capture) +{ + /* inline most common code path */ + struct jtag_tap *tap; + tap = jtag_info->tap; + if (tap == NULL) + return ERROR_FAIL; + + if (buf_get_u32(tap->cur_instr, 0, tap->ir_length) != new_instr) + { + return arm_jtag_set_instr_inner(jtag_info, new_instr, no_verify_capture); + } + + return ERROR_OK; + +} + + +int arm_jtag_scann_inner(struct arm_jtag *jtag_info, uint32_t new_scan_chain); +static inline int arm_jtag_scann(struct arm_jtag *jtag_info, uint32_t new_scan_chain) +{ + /* inline most common code path */ + int retval = ERROR_OK; + if (jtag_info->cur_scan_chain != new_scan_chain) + { + return arm_jtag_scann_inner(jtag_info, new_scan_chain); + } + + return retval; +} + + int arm_jtag_setup_connection(struct arm_jtag *jtag_info); /* use this as a static so we can inline it in -O3 and refer to it via a pointer */ |