From afe95871c59f05d532529af84e1ee80e3845e923 Mon Sep 17 00:00:00 2001 From: Mathias K Date: Tue, 10 Jan 2012 23:21:30 +0100 Subject: [PATCH] optimize: replace while loop by memcpy MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit 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 --- src/flash/nor/stellaris.c | 9 ++------- src/flash/nor/stm32lx.c | 15 +++++---------- src/flash/nor/str7x.c | 9 ++------- src/flash/nor/str9x.c | 9 ++------- src/flash/nor/str9xpec.c | 9 ++------- 5 files changed, 13 insertions(+), 38 deletions(-) diff --git a/src/flash/nor/stellaris.c b/src/flash/nor/stellaris.c index c855995f7d..13b7071e3f 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 8a6ad7bcb3..29a7aac9fc 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 57f860d6aa..0bfe7c9e8a 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 5bea2068c5..674522c734 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 6fa66a09ca..0e095a3043 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); -- 2.30.2