Skip to content

Commit

Permalink
hw/scsi/lsi53c895a: Use sextract32 for sign-extension
Browse files Browse the repository at this point in the history
Use sextract32() for doing sign-extension rather than rolling
our own implementation.

Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
  • Loading branch information
pm215 authored and bonzini committed Sep 12, 2013
1 parent c24e751 commit 9279410
Showing 1 changed file with 5 additions and 11 deletions.
16 changes: 5 additions & 11 deletions hw/scsi/lsi53c895a.c
Expand Up @@ -998,12 +998,6 @@ static void lsi_do_msgout(LSIState *s)
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)
{
Expand Down Expand Up @@ -1083,7 +1077,7 @@ static void lsi_execute_script(LSIState *s)
/* 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;
Expand Down Expand Up @@ -1183,13 +1177,13 @@ static void lsi_execute_script(LSIState *s)
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) {
Expand Down Expand Up @@ -1385,7 +1379,7 @@ static void lsi_execute_script(LSIState *s)
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 */
Expand Down Expand Up @@ -1438,7 +1432,7 @@ static void lsi_execute_script(LSIState *s)
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;
Expand Down

0 comments on commit 9279410

Please sign in to comment.