diff mbox series

mtd: spi-nor: sfdp: add/use local variable in spi_nor_parse_bfpt()

Message ID 1fb857ca-a299-30f3-06e7-ce860e44ff3c@cogentembedded.com
State Accepted
Delegated to: Ambarus Tudor
Headers show
Series mtd: spi-nor: sfdp: add/use local variable in spi_nor_parse_bfpt() | expand

Commit Message

Sergei Shtylyov April 22, 2020, 7 p.m. UTC
Despite of how spi_nor_parse_bfpt() abuses the structure fields during
their calculation, gcc manages to make some decent code out of that. :-)
Yet adding a local variable to store the BFPT DWORDs during calculations
still saves 12 bytes of the object code (AArch64 gcc 4.8.5)...

Signed-off-by: Sergei Shtylyov <sergei.shtylyov@cogentembedded.com>

---
This patch is against the 'spi-nor/next' branch of the MTD 'linux.git' repo.

 drivers/mtd/spi-nor/sfdp.c |   22 +++++++++++-----------
 1 file changed, 11 insertions(+), 11 deletions(-)

Comments

Tudor Ambarus May 31, 2020, 6:05 a.m. UTC | #1
On Wednesday, April 22, 2020 10:00:18 PM EEST Sergei Shtylyov wrote:
> Despite of how spi_nor_parse_bfpt() abuses the structure fields during
> their calculation, gcc manages to make some decent code out of that. 
> Yet adding a local variable to store the BFPT DWORDs during calculations
> still saves 12 bytes of the object code (AArch64 gcc 4.8.5)...
> 
> Signed-off-by: Sergei Shtylyov <sergei.shtylyov@cogentembedded.com>
> 
> ---
> This patch is against the 'spi-nor/next' branch of the MTD 'linux.git' repo.
> 
>  drivers/mtd/spi-nor/sfdp.c |   22 +++++++++++-----------
>  1 file changed, 11 insertions(+), 11 deletions(-)

Applied, thanks.
diff mbox series

Patch

Index: linux/drivers/mtd/spi-nor/sfdp.c
===================================================================
--- linux.orig/drivers/mtd/spi-nor/sfdp.c
+++ linux/drivers/mtd/spi-nor/sfdp.c
@@ -437,7 +437,7 @@  static int spi_nor_parse_bfpt(struct spi
 	struct sfdp_bfpt bfpt;
 	size_t len;
 	int i, cmd, err;
-	u32 addr;
+	u32 addr, val;
 	u16 half;
 	u8 erase_mask;
 
@@ -472,21 +472,21 @@  static int spi_nor_parse_bfpt(struct spi
 	}
 
 	/* Flash Memory Density (in bits). */
-	params->size = bfpt.dwords[BFPT_DWORD(2)];
-	if (params->size & BIT(31)) {
-		params->size &= ~BIT(31);
+	val = bfpt.dwords[BFPT_DWORD(2)];
+	if (val & BIT(31)) {
+		val &= ~BIT(31);
 
 		/*
 		 * Prevent overflows on params->size. Anyway, a NOR of 2^64
 		 * bits is unlikely to exist so this error probably means
 		 * the BFPT we are reading is corrupted/wrong.
 		 */
-		if (params->size > 63)
+		if (val > 63)
 			return -EINVAL;
 
-		params->size = 1ULL << params->size;
+		params->size = 1ULL << val;
 	} else {
-		params->size++;
+		params->size = val + 1;
 	}
 	params->size >>= 3; /* Convert to bytes. */
 
@@ -553,10 +553,10 @@  static int spi_nor_parse_bfpt(struct spi
 						params);
 
 	/* Page size: this field specifies 'N' so the page size = 2^N bytes. */
-	params->page_size = bfpt.dwords[BFPT_DWORD(11)];
-	params->page_size &= BFPT_DWORD11_PAGE_SIZE_MASK;
-	params->page_size >>= BFPT_DWORD11_PAGE_SIZE_SHIFT;
-	params->page_size = 1U << params->page_size;
+	val = bfpt.dwords[BFPT_DWORD(11)];
+	val &= BFPT_DWORD11_PAGE_SIZE_MASK;
+	val >>= BFPT_DWORD11_PAGE_SIZE_SHIFT;
+	params->page_size = 1U << val;
 
 	/* Quad Enable Requirements. */
 	switch (bfpt.dwords[BFPT_DWORD(15)] & BFPT_DWORD15_QER_MASK) {