optimize: replace while loop by memcpy
authorMathias K <kesmtp@freenet.de>
Tue, 10 Jan 2012 22:21:30 +0000 (23:21 +0100)
committerSpencer Oliver <spen@spen-soft.co.uk>
Thu, 12 Jan 2012 20:41:51 +0000 (20:41 +0000)
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 <kesmtp@freenet.de>
Reviewed-on: http://openocd.zylin.com/364
Tested-by: jenkins
Reviewed-by: Øyvind Harboe <oyvindharboe@gmail.com>
Reviewed-by: Spencer Oliver <spen@spen-soft.co.uk>
src/flash/nor/stellaris.c
src/flash/nor/stm32lx.c
src/flash/nor/str7x.c
src/flash/nor/str9x.c
src/flash/nor/str9xpec.c

index c855995f7d8129377f4efc0ee291f9f67bc73800..13b7071e3f813b7f57350347d7510435751660f9 100644 (file)
@@ -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);
index 8a6ad7bcb3a04e8120401c7a87ae7d1dd8d10d42..29a7aac9fc91abf73472c35000348c8ee861c040 100644 (file)
@@ -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;
 
index 57f860d6aa3e8bf1a93e9fcc3f06f03426dd9cd4..0bfe7c9e8a320aff128ee75ba6bb85b98a6ce370 100644 (file)
@@ -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;
index 5bea2068c523f95c30ff8bf3094e0bed7dc3882a..674522c73464047bf5e482b01aab79018289ca86 100644 (file)
@@ -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;
 
index 6fa66a09ca8300e8786d5a2e14daa06d08fd8192..0e095a30434e4e1ed4a09ec08538c69b8a242e32 100644 (file)
@@ -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);