* [Qemu-devel] [PATCH 0/2] lsi53c895a: avoid integer undefined behaviours
@ 2013-08-23 16:16 Peter Maydell
2013-08-23 16:16 ` [Qemu-devel] [PATCH 1/2] hw/scsi/lsi53c895a: Use sextract32 for sign-extension Peter Maydell
` (2 more replies)
0 siblings, 3 replies; 4+ messages in thread
From: Peter Maydell @ 2013-08-23 16:16 UTC (permalink / raw)
To: qemu-devel; +Cc: qemu-trivial, Paolo Bonzini, patches
More patches to fix clang sanitizer warnings; in this case we
can fix them and clean up the code a bit by replacing hand-coded
operations with functions from the bitops header.
Peter Maydell (2):
hw/scsi/lsi53c895a: Use sextract32 for sign-extension
hw/scsi/lsi53c895a: Use deposit32 rather than handcoded shift/mask
hw/scsi/lsi53c895a.c | 19 ++++++-------------
1 file changed, 6 insertions(+), 13 deletions(-)
--
1.7.9.5
^ permalink raw reply [flat|nested] 4+ messages in thread
* [Qemu-devel] [PATCH 1/2] hw/scsi/lsi53c895a: Use sextract32 for sign-extension
2013-08-23 16:16 [Qemu-devel] [PATCH 0/2] lsi53c895a: avoid integer undefined behaviours Peter Maydell
@ 2013-08-23 16:16 ` Peter Maydell
2013-08-23 16:16 ` [Qemu-devel] [PATCH 2/2] hw/scsi/lsi53c895a: Use deposit32 rather than handcoded shift/mask Peter Maydell
2013-08-26 7:49 ` [Qemu-devel] [PATCH 0/2] lsi53c895a: avoid integer undefined behaviours Paolo Bonzini
2 siblings, 0 replies; 4+ messages in thread
From: Peter Maydell @ 2013-08-23 16:16 UTC (permalink / raw)
To: qemu-devel; +Cc: qemu-trivial, Paolo Bonzini, patches
Use sextract32() for doing sign-extension rather than rolling
our own implementation.
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
---
hw/scsi/lsi53c895a.c | 16 +++++-----------
1 file changed, 5 insertions(+), 11 deletions(-)
diff --git a/hw/scsi/lsi53c895a.c b/hw/scsi/lsi53c895a.c
index 611f2aa..333c62f 100644
--- a/hw/scsi/lsi53c895a.c
+++ b/hw/scsi/lsi53c895a.c
@@ -998,12 +998,6 @@ bad:
s->msg_action = 0;
}
-/* Sign extend a 24-bit value. */
-static inline int32_t sxt24(int32_t n)
-{
- return (n << 8) >> 8;
-}
-
#define LSI_BUF_SIZE 4096
static void lsi_memcpy(LSIState *s, uint32_t dest, uint32_t src, int count)
{
@@ -1083,7 +1077,7 @@ again:
/* Table indirect addressing. */
/* 32-bit Table indirect */
- offset = sxt24(addr);
+ offset = sextract32(addr, 0, 24);
pci_dma_read(pci_dev, s->dsa + offset, buf, 8);
/* byte count is stored in bits 0:23 only */
s->dbc = cpu_to_le32(buf[0]) & 0xffffff;
@@ -1183,13 +1177,13 @@ again:
uint32_t id;
if (insn & (1 << 25)) {
- id = read_dword(s, s->dsa + sxt24(insn));
+ id = read_dword(s, s->dsa + sextract32(insn, 0, 24));
} else {
id = insn;
}
id = (id >> 16) & 0xf;
if (insn & (1 << 26)) {
- addr = s->dsp + sxt24(addr);
+ addr = s->dsp + sextract32(addr, 0, 24);
}
s->dnad = addr;
switch (opcode) {
@@ -1385,7 +1379,7 @@ again:
if (cond == jmp) {
if (insn & (1 << 23)) {
/* Relative address. */
- addr = s->dsp + sxt24(addr);
+ addr = s->dsp + sextract32(addr, 0, 24);
}
switch ((insn >> 27) & 7) {
case 0: /* Jump */
@@ -1438,7 +1432,7 @@ again:
int i;
if (insn & (1 << 28)) {
- addr = s->dsa + sxt24(addr);
+ addr = s->dsa + sextract32(addr, 0, 24);
}
n = (insn & 7);
reg = (insn >> 16) & 0xff;
--
1.7.9.5
^ permalink raw reply related [flat|nested] 4+ messages in thread
* [Qemu-devel] [PATCH 2/2] hw/scsi/lsi53c895a: Use deposit32 rather than handcoded shift/mask
2013-08-23 16:16 [Qemu-devel] [PATCH 0/2] lsi53c895a: avoid integer undefined behaviours Peter Maydell
2013-08-23 16:16 ` [Qemu-devel] [PATCH 1/2] hw/scsi/lsi53c895a: Use sextract32 for sign-extension Peter Maydell
@ 2013-08-23 16:16 ` Peter Maydell
2013-08-26 7:49 ` [Qemu-devel] [PATCH 0/2] lsi53c895a: avoid integer undefined behaviours Paolo Bonzini
2 siblings, 0 replies; 4+ messages in thread
From: Peter Maydell @ 2013-08-23 16:16 UTC (permalink / raw)
To: qemu-devel; +Cc: qemu-trivial, Paolo Bonzini, patches
Use deposit32() rather than handcoded shifts/masks to update the
scratch registers. This is cleaner and incidentally avoids a clang
sanitizer complaint ("runtime error: left shift of 255 by 24 places
cannot be represented in type 'int'").
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
---
hw/scsi/lsi53c895a.c | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/hw/scsi/lsi53c895a.c b/hw/scsi/lsi53c895a.c
index 333c62f..9c64e7c 100644
--- a/hw/scsi/lsi53c895a.c
+++ b/hw/scsi/lsi53c895a.c
@@ -1870,8 +1870,7 @@ static void lsi_reg_writeb(LSIState *s, int offset, uint8_t val)
int shift;
n = (offset - 0x58) >> 2;
shift = (offset & 3) * 8;
- s->scratch[n] &= ~(0xff << shift);
- s->scratch[n] |= (val & 0xff) << shift;
+ s->scratch[n] = deposit32(s->scratch[n], shift, 8, val);
} else {
BADF("Unhandled writeb 0x%x = 0x%x\n", offset, val);
}
--
1.7.9.5
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [Qemu-devel] [PATCH 0/2] lsi53c895a: avoid integer undefined behaviours
2013-08-23 16:16 [Qemu-devel] [PATCH 0/2] lsi53c895a: avoid integer undefined behaviours Peter Maydell
2013-08-23 16:16 ` [Qemu-devel] [PATCH 1/2] hw/scsi/lsi53c895a: Use sextract32 for sign-extension Peter Maydell
2013-08-23 16:16 ` [Qemu-devel] [PATCH 2/2] hw/scsi/lsi53c895a: Use deposit32 rather than handcoded shift/mask Peter Maydell
@ 2013-08-26 7:49 ` Paolo Bonzini
2 siblings, 0 replies; 4+ messages in thread
From: Paolo Bonzini @ 2013-08-26 7:49 UTC (permalink / raw)
To: Peter Maydell; +Cc: qemu-trivial, qemu-devel, patches
Il 23/08/2013 18:16, Peter Maydell ha scritto:
> More patches to fix clang sanitizer warnings; in this case we
> can fix them and clean up the code a bit by replacing hand-coded
> operations with functions from the bitops header.
>
> Peter Maydell (2):
> hw/scsi/lsi53c895a: Use sextract32 for sign-extension
> hw/scsi/lsi53c895a: Use deposit32 rather than handcoded shift/mask
>
> hw/scsi/lsi53c895a.c | 19 ++++++-------------
> 1 file changed, 6 insertions(+), 13 deletions(-)
>
Applied both to scsi-next, thanks.
Paolo
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2013-08-26 7:50 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-08-23 16:16 [Qemu-devel] [PATCH 0/2] lsi53c895a: avoid integer undefined behaviours Peter Maydell
2013-08-23 16:16 ` [Qemu-devel] [PATCH 1/2] hw/scsi/lsi53c895a: Use sextract32 for sign-extension Peter Maydell
2013-08-23 16:16 ` [Qemu-devel] [PATCH 2/2] hw/scsi/lsi53c895a: Use deposit32 rather than handcoded shift/mask Peter Maydell
2013-08-26 7:49 ` [Qemu-devel] [PATCH 0/2] lsi53c895a: avoid integer undefined behaviours Paolo Bonzini
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).