From: Mathias K Date: Tue, 10 Jan 2012 22:21:30 +0000 (+0100) Subject: optimize: replace while loop by memcpy X-Git-Tag: v0.6.0-rc1~319 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=afe95871c59f05d532529af84e1ee80e3845e923;p=openocd optimize: replace while loop by memcpy There is no need to use a while loop here. This patch simple copy the last bytes with the system function. Change-Id: Ibda72dca449746efeba5a1af2e45c5990f9cf347 Signed-off-by: Mathias K Reviewed-on: http://openocd.zylin.com/364 Tested-by: jenkins Reviewed-by: Øyvind Harboe Reviewed-by: Spencer Oliver --- diff --git a/src/flash/nor/stellaris.c b/src/flash/nor/stellaris.c index c855995f..13b7071e 100644 --- a/src/flash/nor/stellaris.c +++ b/src/flash/nor/stellaris.c @@ -1214,14 +1214,9 @@ static int stellaris_write(struct flash_bank *bank, uint8_t *buffer, uint32_t of if (bytes_remaining) { uint8_t last_word[4] = {0xff, 0xff, 0xff, 0xff}; - int i = 0; - while (bytes_remaining > 0) - { - last_word[i++] = *(buffer + bytes_written); - bytes_remaining--; - bytes_written++; - } + /* copy the last remaining bytes into the write buffer */ + memcpy(last_word, buffer+bytes_written, bytes_remaining); if (!(address & 0xff)) LOG_DEBUG("0x%" PRIx32 "", address); diff --git a/src/flash/nor/stm32lx.c b/src/flash/nor/stm32lx.c index 8a6ad7bc..29a7aac9 100644 --- a/src/flash/nor/stm32lx.c +++ b/src/flash/nor/stm32lx.c @@ -464,17 +464,12 @@ static int stm32lx_write(struct flash_bank *bank, uint8_t *buffer, if (bytes_remaining) { - uint32_t value = 0; - for (int i = 0; i < 4; i++) - { - if (bytes_remaining) - { - value += (buffer[i] << (8 * i)); - bytes_remaining--; - } - } + uint8_t last_word[4] = {0xff, 0xff, 0xff, 0xff}; - retval = target_write_u32(target, address, value); + /* copy the last remaining bytes into the write buffer */ + memcpy(last_word, buffer+bytes_written, bytes_remaining); + + retval = target_write_buffer(target, address, 4, last_word); if (retval != ERROR_OK) return retval; diff --git a/src/flash/nor/str7x.c b/src/flash/nor/str7x.c index 57f860d6..0bfe7c9e 100644 --- a/src/flash/nor/str7x.c +++ b/src/flash/nor/str7x.c @@ -707,14 +707,9 @@ static int str7x_write(struct flash_bank *bank, uint8_t *buffer, if (bytes_remaining) { uint8_t last_dword[8] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}; - i = 0; - while (bytes_remaining > 0) - { - last_dword[i++] = *(buffer + bytes_written); - bytes_remaining--; - bytes_written++; - } + /* copy the last remaining bytes into the write buffer */ + memcpy(last_dword, buffer+bytes_written, bytes_remaining); /* command */ cmd = FLASH_DWPG; diff --git a/src/flash/nor/str9x.c b/src/flash/nor/str9x.c index 5bea2068..674522c7 100644 --- a/src/flash/nor/str9x.c +++ b/src/flash/nor/str9x.c @@ -618,14 +618,9 @@ static int str9x_write(struct flash_bank *bank, if (bytes_remaining) { uint8_t last_halfword[2] = {0xff, 0xff}; - i = 0; - while (bytes_remaining > 0) - { - last_halfword[i++] = *(buffer + bytes_written); - bytes_remaining--; - bytes_written++; - } + /* copy the last remaining bytes into the write buffer */ + memcpy(last_halfword, buffer+bytes_written, bytes_remaining); bank_adr = address & ~0x03; diff --git a/src/flash/nor/str9xpec.c b/src/flash/nor/str9xpec.c index 6fa66a09..0e095a30 100644 --- a/src/flash/nor/str9xpec.c +++ b/src/flash/nor/str9xpec.c @@ -714,14 +714,9 @@ static int str9xpec_write(struct flash_bank *bank, uint8_t *buffer, if (bytes_remaining) { uint8_t last_dword[8] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}; - i = 0; - while (bytes_remaining > 0) - { - last_dword[i++] = *(buffer + bytes_written); - bytes_remaining--; - bytes_written++; - } + /* copy the last remaining bytes into the write buffer */ + memcpy(last_dword, buffer+bytes_written, bytes_remaining); str9xpec_set_instr(tap, ISC_PROGRAM, TAP_IRPAUSE);