diff --git a/src/cdrom/cdrom_image_viso.c b/src/cdrom/cdrom_image_viso.c index 3eec6d5a1..5c47b745d 100644 --- a/src/cdrom/cdrom_image_viso.c +++ b/src/cdrom/cdrom_image_viso.c @@ -880,7 +880,7 @@ viso_init(const uint8_t id, const char *dirname, int *error) if (dirp) { /* create empty directory if opendir failed */ while ((readdir_entry = readdir(dirp))) { /* Ignore . and .. pseudo-directories. */ - if ((readdir_entry->d_name[0] == '.') && ((readdir_entry->d_name[1] == '\0') || (*((uint16_t *) &readdir_entry->d_name[1]) == '.'))) + if ((readdir_entry->d_name[0] == '.') && ((readdir_entry->d_name[1] == '\0') || (AS_U16(readdir_entry->d_name[1]) == '.'))) continue; children_count++; } @@ -927,7 +927,7 @@ viso_init(const uint8_t id, const char *dirname, int *error) /* Ignore . and .. pseudo-directories. */ if ((readdir_entry->d_name[0] == '.') && ((readdir_entry->d_name[1] == '\0') || - (*((uint16_t *) &readdir_entry->d_name[1]) == '.'))) + (AS_U16(readdir_entry->d_name[1]) == '.'))) continue; /* Add and fill entry. */ @@ -1245,8 +1245,8 @@ next_dir: /* Calculate checksum. */ uint16_t eltorito_checksum = 0; for (int i = 0; i < (p - data); i += 2) - eltorito_checksum -= le16_to_cpu(*((uint16_t *) &data[i])); - *((uint16_t *) &data[28]) = cpu_to_le16(eltorito_checksum); + eltorito_checksum -= le16_to_cpu(AS_U16(data[i])); + AS_U16(data[28]) = cpu_to_le16(eltorito_checksum); /* Now fill the default boot entry. */ *p++ = 0x88; /* bootable flag */ @@ -1552,11 +1552,11 @@ next_entry: uint32_t boot_size = entry->stats.st_size; if (boot_size % 512) /* round up */ boot_size += 512 - (boot_size % 512); - *((uint16_t *) &data[0]) = cpu_to_le16(boot_size / 512); + AS_U16(data[0]) = cpu_to_le16(boot_size / 512); } else { /* emulation */ - *((uint16_t *) &data[0]) = cpu_to_le16(1); + AS_U16(data[0]) = cpu_to_le16(1); } - *((uint32_t *) &data[2]) = cpu_to_le32(viso->all_sectors * base_factor); + AS_U32(data[2]) = cpu_to_le32(viso->all_sectors * base_factor); viso_pwrite(data, eltorito_offset, 6, 1, viso->tf.fp); } else { p = data; diff --git a/src/cpu/386_common.h b/src/cpu/386_common.h index 8e1f7533f..1efda9d4f 100644 --- a/src/cpu/386_common.h +++ b/src/cpu/386_common.h @@ -542,7 +542,7 @@ fastreadl_fetch(uint32_t a) # if (defined __amd64__ || defined _M_X64 || defined __aarch64__ || defined _M_ARM64) return *((uint32_t *) (((uintptr_t) &pccache2[a] & 0x00000000ffffffffULL) | ((uintptr_t) &pccache2[0] & 0xffffffff00000000ULL))); # else - return *((uint32_t *) &pccache2[a]); + return AS_U32(pccache2[a]); # endif } val = fastreadw_fetch(a); diff --git a/src/device/isapnp.c b/src/device/isapnp.c index ce8f7817f..31c0b6d62 100644 --- a/src/device/isapnp.c +++ b/src/device/isapnp.c @@ -815,22 +815,22 @@ isapnp_update_card_rom(void *priv, uint8_t *rom, uint16_t rom_size) isapnp_log("ISAPnP: >>%s Memory range %d with %d bytes at %06X-%06X to %06X-%06X, align %d", /* %s */ in_df ? ">" : "", /* %d */ mem_range, - /* %d */ *((uint16_t *) &card->rom[i + 8]), - /* %06X */ *((uint16_t *) &card->rom[i + 4]) << 8, + /* %d */ AS_U16(card->rom[i + 8]), + /* %06X */ AS_U16(card->rom[i + 4]) << 8, /* %06X */ ((card->rom[i + 3] & 0x4) ? /* High address. */ - (*((uint16_t *) &card->rom[i + 10]) << 8) : + (AS_U16(card->rom[i + 10]) << 8) : /* Range. */ - (*((uint16_t *) &card->rom[i + 4]) << 8)) + - (*((uint16_t *) &card->rom[i + 10]) << 8), - /* %06X */ *((uint16_t *) &card->rom[i + 6]) << 8, + (AS_U16(card->rom[i + 4]) << 8)) + + (AS_U16(card->rom[i + 10]) << 8), + /* %06X */ AS_U16(card->rom[i + 6]) << 8, /* %06X */ ((card->rom[i + 3] & 0x4) ? /* High address. */ - (*((uint16_t *) &card->rom[i + 10]) << 8) : + (AS_U16(card->rom[i + 10]) << 8) : /* Range. */ - (*((uint16_t *) &card->rom[i + 6]) << 8)) + - (*((uint16_t *) &card->rom[i + 10]) << 8), - /* %d */ *((uint16_t *) &card->rom[i + 8])); + (AS_U16(card->rom[i + 6]) << 8)) + + (AS_U16(card->rom[i + 10]) << 8), + /* %d */ AS_U16(card->rom[i + 8])); res = 1 << mem_range; mem_range++; } else { @@ -847,22 +847,22 @@ isapnp_update_card_rom(void *priv, uint8_t *rom, uint16_t rom_size) isapnp_log("ISAPnP: >>%s 32-bit memory range %d with %d bytes at %08X-%08X, align %d", /* %s */ in_df ? ">" : "", /* %d */ mem_range_32, - /* %d */ *((uint32_t *) &card->rom[i + 12]), - /* %08X */ *((uint32_t *) &card->rom[i + 4]), + /* %d */ AS_U32(card->rom[i + 12]), + /* %08X */ AS_U32(card->rom[i + 4]), /* %08X */ ((card->rom[i + 3] & 0x4) ? /* High address. */ - *((uint32_t *) &card->rom[i + 16]) : + AS_U32(card->rom[i + 16]) : /* Range. */ - *((uint32_t *) &card->rom[i + 4])) + - *((uint32_t *) &card->rom[i + 16]), - /* %08X */ *((uint32_t *) &card->rom[i + 8]), + AS_U32(card->rom[i + 4])) + + AS_U32(card->rom[i + 16]), + /* %08X */ AS_U32(card->rom[i + 8]), /* %08X */ ((card->rom[i + 3] & 0x4) ? /* High address. */ - *((uint32_t *) &card->rom[i + 16]) : + AS_U32(card->rom[i + 16]) : /* Range. */ - *((uint32_t *) &card->rom[i + 8])) + - *((uint32_t *) &card->rom[i + 16]), - /* %d */ *((uint32_t *) &card->rom[i + 12])); + AS_U32(card->rom[i + 8])) + + AS_U32(card->rom[i + 16]), + /* %d */ AS_U32(card->rom[i + 12])); res = 1 << (4 + mem_range_32); mem_range_32++; } @@ -972,7 +972,7 @@ isapnp_update_card_rom(void *priv, uint8_t *rom, uint16_t rom_size) else /* specific */ res = card->rom[i + 3] & 0x0f; - isapnp_log("ISAPnP: >>%s IRQ index %d with mask %04X, types %01X\n", in_df ? ">" : "", irq, *((uint16_t *) &card->rom[i + 1]), res); + isapnp_log("ISAPnP: >>%s IRQ index %d with mask %04X, types %01X\n", in_df ? ">" : "", irq, AS_U16(card->rom[i + 1]), res); ld->irq_types &= ~(0x0f << (4 * irq)); ld->irq_types |= res << (4 * irq); @@ -1038,7 +1038,7 @@ isapnp_update_card_rom(void *priv, uint8_t *rom, uint16_t rom_size) break; } - isapnp_log("ISAPnP: >>%s I/O range %d with %d ports at %04X-%04X, align %d, %d-bit decode\n", in_df ? ">" : "", io, card->rom[i + 7], *((uint16_t *) &card->rom[i + 2]), *((uint16_t *) &card->rom[i + 4]), card->rom[i + 6], (card->rom[i + 1] & 0x01) ? 16 : 10); + isapnp_log("ISAPnP: >>%s I/O range %d with %d ports at %04X-%04X, align %d, %d-bit decode\n", in_df ? ">" : "", io, card->rom[i + 7], AS_U16(card->rom[i + 2]), AS_U16(card->rom[i + 4]), card->rom[i + 6], (card->rom[i + 1] & 0x01) ? 16 : 10); if (card->rom[i + 1] & 0x01) ld->io_16bit |= 1 << io; @@ -1063,7 +1063,7 @@ isapnp_update_card_rom(void *priv, uint8_t *rom, uint16_t rom_size) break; } - isapnp_log("ISAPnP: >>%s Fixed I/O range %d with %d ports at %04X\n", in_df ? ">" : "", io, card->rom[i + 3], *((uint16_t *) &card->rom[i + 1])); + isapnp_log("ISAPnP: >>%s Fixed I/O range %d with %d ports at %04X\n", in_df ? ">" : "", io, card->rom[i + 3], AS_U16(card->rom[i + 1])); /* Fixed I/O port ranges of this kind are always 10-bit. */ ld->io_16bit &= ~(1 << io); diff --git a/src/gdbstub.c b/src/gdbstub.c index 2ae40d24c..120e71142 100644 --- a/src/gdbstub.c +++ b/src/gdbstub.c @@ -535,8 +535,8 @@ gdbstub_client_write_reg(int index, uint8_t *buf) break; case GDB_REG_EFLAGS: - cpu_state.flags = *((uint16_t *) &buf[0]); - cpu_state.eflags = *((uint16_t *) &buf[2]); + cpu_state.flags = AS_U16(buf[0]); + cpu_state.eflags = AS_U16(buf[2]); break; case GDB_REG_CS ... GDB_REG_GS: @@ -564,8 +564,8 @@ gdbstub_client_write_reg(int index, uint8_t *buf) case GDB_REG_ST0 ... GDB_REG_ST7: width = 10; x87_conv_t conv = { - .eind = { .ll = *((uint64_t *) &buf[0]) }, - .begin = *((uint16_t *) &buf[8]) + .eind = { .ll = AS_U64(buf[0]) }, + .begin = AS_U16(buf[8]) }; cpu_state.ST[(cpu_state.TOP + (index - GDB_REG_ST0)) & 7] = x87_from80(&conv); break; @@ -671,8 +671,8 @@ gdbstub_client_read_reg(int index, uint8_t *buf) break; case GDB_REG_EFLAGS: - *((uint16_t *) &buf[0]) = cpu_state.flags; - *((uint16_t *) &buf[2]) = cpu_state.eflags; + AS_U16(buf[0]) = cpu_state.flags; + AS_U16(buf[2]) = cpu_state.eflags; break; case GDB_REG_CS ... GDB_REG_GS: @@ -697,8 +697,8 @@ gdbstub_client_read_reg(int index, uint8_t *buf) width = 10; x87_conv_t conv; x87_to80(cpu_state.ST[(cpu_state.TOP + (index - GDB_REG_ST0)) & 7], &conv); - *((uint64_t *) &buf[0]) = conv.eind.ll; - *((uint16_t *) &buf[8]) = conv.begin; + AS_U64(buf[0]) = conv.eind.ll; + AS_U16(buf[8]) = conv.begin; break; case GDB_REG_FCTRL ... GDB_REG_FSTAT: @@ -757,7 +757,7 @@ gdbstub_client_packet(gdbstub_client_t *client) #ifdef GDBSTUB_CHECK_CHECKSUM gdbstub_client_read_hex(client, &rcv_checksum, 1); #endif - *((uint16_t *) &client->packet[--client->packet_pos]) = 0; + AS_U16(client->packet[--client->packet_pos]) = 0; #ifdef GDBSTUB_CHECK_CHECKSUM for (i = 0; i < client->packet_pos; i++) checksum += client->packet[i]; diff --git a/src/network/net_rtl8139.c b/src/network/net_rtl8139.c index 41ce86f6b..5f2c85b03 100644 --- a/src/network/net_rtl8139.c +++ b/src/network/net_rtl8139.c @@ -835,7 +835,7 @@ rtl8139_do_receive(void *priv, uint8_t *buf, int size_) uint32_t rx_space = rxdw0 & CP_RX_BUFFER_SIZE_MASK; /* write VLAN info to descriptor variables. */ - if (s->CpCmd & CPlusRxVLAN && bswap16(*((uint16_t *) &buf[ETH_ALEN * 2])) == 0x8100) { + if (s->CpCmd & CPlusRxVLAN && bswap16(AS_U16(buf[ETH_ALEN * 2])) == 0x8100) { dot1q_buf = &buf[ETH_ALEN * 2]; size -= VLAN_HLEN; /* if too small buffer, use the tailroom added duing expansion */ @@ -849,7 +849,7 @@ rtl8139_do_receive(void *priv, uint8_t *buf, int size_) rtl8139_log("C+ Rx mode : extracted vlan tag with tci: " "%u\n", - bswap16(*((uint16_t *) &dot1q_buf[ETHER_TYPE_LEN]))); + bswap16(AS_U16(dot1q_buf[ETHER_TYPE_LEN]))); } else { /* reset VLAN tag flag */ rxdw1 &= ~CP_RX_TAVA; diff --git a/src/sio/sio_it86x1f.c b/src/sio/sio_it86x1f.c index 324914355..c9eaea2b7 100644 --- a/src/sio/sio_it86x1f.c +++ b/src/sio/sio_it86x1f.c @@ -43,7 +43,7 @@ enum { ITE_IT8671F = 0x8681 }; -#define CHIP_ID *((uint16_t *) &dev->global_regs[0]) +#define CHIP_ID AS_U16(dev->global_regs[0]) static void it8671f_pnp_config_changed(uint8_t ld, isapnp_device_config_t *config, void *priv); static void it8661f_pnp_config_changed(uint8_t ld, isapnp_device_config_t *config, void *priv); @@ -571,7 +571,7 @@ it86x1f_pnp_write_vendor_reg(uint8_t ld, uint8_t reg, uint8_t val, void *priv) case 0x7e3: if ((CHIP_ID == ITE_IT8671F) && (val & 0x80)) - *((uint16_t *) &dev->gpio_regs[0x22]) = 0x0000; + AS_U16(dev->gpio_regs[0x22]) = 0x0000; break; case 0x7fb: diff --git a/src/sound/snd_ac97_via.c b/src/sound/snd_ac97_via.c index 2d994b08f..4b9a86d23 100644 --- a/src/sound/snd_ac97_via.c +++ b/src/sound/snd_ac97_via.c @@ -348,7 +348,7 @@ ac97_via_sgd_write(uint16_t addr, uint8_t val, void *priv) dev->sgd_regs[modem][addr & 0xf0] = (dev->sgd_regs[modem][addr & 0xf0] & ~0x47) | 0x80; /* Start at the specified entry pointer. */ - dev->sgd[modem][addr >> 4].entry_ptr = *((uint32_t *) &dev->sgd_regs[modem][(addr & 0xf0) | 0x4]) & 0xfffffffe; + dev->sgd[modem][addr >> 4].entry_ptr = AS_U32(dev->sgd_regs[modem][(addr & 0xf0) | 0x4]) & 0xfffffffe; dev->sgd[modem][addr >> 4].restart = 2; /* Start the actual SGD process. */ @@ -403,14 +403,14 @@ ac97_via_sgd_write(uint16_t addr, uint8_t val, void *priv) if (val & 1) { /* return 0x0000 on unaligned reads (real 686B behavior) */ dev->sgd_regs[modem][0x80] = dev->sgd_regs[modem][0x81] = 0x00; } else { - *((uint16_t *) &dev->codec_shadow[modem].regs_codec[i][val & 0x7f]) = *((uint16_t *) &dev->sgd_regs[modem][0x80]) = ac97_codec_readw(codec, val); + AS_U16(dev->codec_shadow[modem].regs_codec[i][val & 0x7f]) = AS_U16(dev->sgd_regs[modem][0x80]) = ac97_codec_readw(codec, val); } /* Flag data/status/index for this codec as valid. */ dev->sgd_regs[modem][0x83] |= 0x02 << (i << 1); } else if (!(val & 1)) { /* do nothing on unaligned writes */ ac97_codec_writew(codec, val, - *((uint16_t *) &dev->codec_shadow[modem].regs_codec[i][val & 0x7f]) = *((uint16_t *) &dev->sgd_regs[modem][0x80])); + AS_U16(dev->codec_shadow[modem].regs_codec[i][val & 0x7f]) = AS_U16(dev->sgd_regs[modem][0x80])); /* Update primary audio codec state if that codec was written to. */ if (!modem && !i) { @@ -579,7 +579,7 @@ ac97_via_sgd_process(void *priv) if (sgd->restart) { /* (Re)load entry pointer if required. */ if (sgd->restart & 2) - sgd->entry_ptr = *((uint32_t *) &dev->sgd_regs[sgd->modem][sgd->id | 0x4]) & 0xfffffffe; /* TODO: probe real hardware - does "even addr" actually mean dword aligned? */ + sgd->entry_ptr = AS_U32(dev->sgd_regs[sgd->modem][sgd->id | 0x4]) & 0xfffffffe; /* TODO: probe real hardware - does "even addr" actually mean dword aligned? */ sgd->restart = 0; /* Read entry. */ @@ -605,11 +605,11 @@ ac97_via_sgd_process(void *priv) if (sgd->id & 0x10) { /* Write channel: read data from FIFO. */ - // mem_writel_phys(sgd->sample_ptr, *((uint32_t *) &sgd->fifo[sgd->fifo_end & (sizeof(sgd->fifo) - 1)])); + // mem_writel_phys(sgd->sample_ptr, AS_U32(sgd->fifo[sgd->fifo_end & (sizeof(sgd->fifo) - 1)])); dma_bm_write(sgd->sample_ptr, &sgd->fifo[sgd->fifo_end & (sizeof(sgd->fifo) - 1)], 4, 4); } else { /* Read channel: write data to FIFO. */ - // *((uint32_t *) &sgd->fifo[sgd->fifo_end & (sizeof(sgd->fifo) - 1)]) = mem_readl_phys(sgd->sample_ptr); + // AS_U32(sgd->fifo[sgd->fifo_end & (sizeof(sgd->fifo) - 1)]) = mem_readl_phys(sgd->sample_ptr); dma_bm_read(sgd->sample_ptr, &sgd->fifo[sgd->fifo_end & (sizeof(sgd->fifo) - 1)], 4, 4); } sgd->fifo_end += 4; @@ -709,7 +709,7 @@ ac97_via_poll_stereo(void *priv) case 0x20: /* Mono, 16-bit PCM */ if ((sgd->fifo_end - sgd->fifo_pos) >= 2) { - sgd->out_l = sgd->out_r = *((uint16_t *) &sgd->fifo[sgd->fifo_pos & (sizeof(sgd->fifo) - 1)]); + sgd->out_l = sgd->out_r = AS_U16(sgd->fifo[sgd->fifo_pos & (sizeof(sgd->fifo) - 1)]); sgd->fifo_pos += 2; return; } @@ -717,9 +717,9 @@ ac97_via_poll_stereo(void *priv) case 0x30: /* Stereo, 16-bit PCM */ if ((sgd->fifo_end - sgd->fifo_pos) >= 4) { - sgd->out_l = *((uint16_t *) &sgd->fifo[sgd->fifo_pos & (sizeof(sgd->fifo) - 1)]); + sgd->out_l = AS_U16(sgd->fifo[sgd->fifo_pos & (sizeof(sgd->fifo) - 1)]); sgd->fifo_pos += 2; - sgd->out_r = *((uint16_t *) &sgd->fifo[sgd->fifo_pos & (sizeof(sgd->fifo) - 1)]); + sgd->out_r = AS_U16(sgd->fifo[sgd->fifo_pos & (sizeof(sgd->fifo) - 1)]); sgd->fifo_pos += 2; return; } @@ -749,9 +749,9 @@ ac97_via_poll_fm(void *priv) /* Feed next sample from the FIFO. The data format is not documented, but it probes as 16-bit stereo at 24 KHz. */ if ((sgd->fifo_end - sgd->fifo_pos) >= 4) { - sgd->out_l = *((uint16_t *) &sgd->fifo[sgd->fifo_pos & (sizeof(sgd->fifo) - 1)]); + sgd->out_l = AS_U16(sgd->fifo[sgd->fifo_pos & (sizeof(sgd->fifo) - 1)]); sgd->fifo_pos += 2; - sgd->out_r = *((uint16_t *) &sgd->fifo[sgd->fifo_pos & (sizeof(sgd->fifo) - 1)]); + sgd->out_r = AS_U16(sgd->fifo[sgd->fifo_pos & (sizeof(sgd->fifo) - 1)]); sgd->fifo_pos += 2; return; } diff --git a/src/sound/snd_audiopci.c b/src/sound/snd_audiopci.c index 1ca547650..23c4863c7 100644 --- a/src/sound/snd_audiopci.c +++ b/src/sound/snd_audiopci.c @@ -438,8 +438,8 @@ es137x_reset(void *priv) /* Default subsystem ID. */ dev->subsys_lock = 0x00; - *((uint16_t *) &dev->subsys_id[0]) = (dev->type == AUDIOPCI_ES1370) ? 0x4942 : 0x1274; - *((uint16_t *) &dev->subsys_id[2]) = (dev->type == AUDIOPCI_ES1370) ? 0x4c4c : 0x1371; + AS_U16(dev->subsys_id[0]) = (dev->type == AUDIOPCI_ES1370) ? 0x4942 : 0x1274; + AS_U16(dev->subsys_id[2]) = (dev->type == AUDIOPCI_ES1370) ? 0x4c4c : 0x1371; /* Interrupt/Chip Select Control Register, Address 00H Addressable as byte, word, longword */ diff --git a/src/sound/snd_cmi8x38.c b/src/sound/snd_cmi8x38.c index a41f53865..5148ebd00 100644 --- a/src/sound/snd_cmi8x38.c +++ b/src/sound/snd_cmi8x38.c @@ -147,7 +147,7 @@ static void cmi8x38_update_irqs(cmi8x38_t *dev) { /* Calculate and use the INTR flag. */ - if (*((uint32_t *) &dev->io_regs[0x10]) & 0x0401c003) { + if (AS_U32(dev->io_regs[0x10]) & 0x0401c003) { dev->io_regs[0x13] |= 0x80; pci_set_irq(dev->pci_slot, PCI_INTA, &dev->irq_state); cmi8x38_log("CMI8x38: Raising IRQ\n"); @@ -912,19 +912,19 @@ cmi8x38_write(uint16_t addr, uint8_t val, void *priv) case 0x80 ... 0x83: case 0x88 ... 0x8b: dev->io_regs[addr] = val; - dev->dma[(addr & 0x78) >> 3].sample_ptr = *((uint32_t *) &dev->io_regs[addr & 0xfc]); + dev->dma[(addr & 0x78) >> 3].sample_ptr = AS_U32(dev->io_regs[addr & 0xfc]); return; case 0x84 ... 0x85: case 0x8c ... 0x8d: dev->io_regs[addr] = val; - dev->dma[(addr & 0x78) >> 3].frame_count_dma = dev->dma[(addr & 0x78) >> 3].sample_count_out = *((uint16_t *) &dev->io_regs[addr & 0xfe]) + 1; + dev->dma[(addr & 0x78) >> 3].frame_count_dma = dev->dma[(addr & 0x78) >> 3].sample_count_out = AS_U16(dev->io_regs[addr & 0xfe]) + 1; return; case 0x86 ... 0x87: case 0x8e ... 0x8f: dev->io_regs[addr] = val; - dev->dma[(addr & 0x78) >> 3].frame_count_fragment = *((uint16_t *) &dev->io_regs[addr & 0xfe]) + 1; + dev->dma[(addr & 0x78) >> 3].frame_count_fragment = AS_U16(dev->io_regs[addr & 0xfe]) + 1; return; case 0x92: @@ -1074,19 +1074,19 @@ cmi8x38_dma_process(void *priv) /* Set up base address and counters. Nothing reads sample_count_out; it's implemented as an assumption. */ dma->restart = 0; - dma->sample_ptr = *((uint32_t *) &dev->io_regs[dma->reg]); - dma->frame_count_dma = dma->sample_count_out = *((uint16_t *) &dev->io_regs[dma->reg | 0x4]) + 1; - dma->frame_count_fragment = *((uint16_t *) &dev->io_regs[dma->reg | 0x6]) + 1; + dma->sample_ptr = AS_U32(dev->io_regs[dma->reg]); + dma->frame_count_dma = dma->sample_count_out = AS_U16(dev->io_regs[dma->reg | 0x4]) + 1; + dma->frame_count_fragment = AS_U16(dev->io_regs[dma->reg | 0x6]) + 1; cmi8x38_log("CMI8x38: Starting DMA %d at %08X (count %04X fragment %04X)\n", dma->id, dma->sample_ptr, dma->frame_count_dma, dma->frame_count_fragment); } if (dma_status & 0x01) { /* Write channel: read data from FIFO. */ - mem_writel_phys(dma->sample_ptr, *((uint32_t *) &dma->fifo[dma->fifo_end & (sizeof(dma->fifo) - 1)])); + mem_writel_phys(dma->sample_ptr, AS_U32(dma->fifo[dma->fifo_end & (sizeof(dma->fifo) - 1)])); } else { /* Read channel: write data to FIFO. */ - *((uint32_t *) &dma->fifo[dma->fifo_end & (sizeof(dma->fifo) - 1)]) = mem_readl_phys(dma->sample_ptr); + AS_U32(dma->fifo[dma->fifo_end & (sizeof(dma->fifo) - 1)]) = mem_readl_phys(dma->sample_ptr); } dma->fifo_end += 4; dma->sample_ptr += 4; @@ -1094,7 +1094,7 @@ cmi8x38_dma_process(void *priv) /* Check if the fragment size was reached. */ if (--dma->frame_count_fragment <= 0) { /* Reset fragment counter. */ - dma->frame_count_fragment = *((uint16_t *) &dev->io_regs[dma->reg | 0x6]) + 1; + dma->frame_count_fragment = AS_U16(dev->io_regs[dma->reg | 0x6]) + 1; #ifdef ENABLE_CMI8X38_LOG if (dma->frame_count_fragment > 1) /* avoid log spam if fragment counting is unused, like on the newer WDM drivers (cmudax3) */ cmi8x38_log("CMI8x38: DMA %d fragment size reached at %04X frames left", dma->id, dma->frame_count_dma - 1); @@ -1181,7 +1181,7 @@ cmi8x38_poll(void *priv) case 0x02: /* Mono, 16-bit PCM */ if ((dma->fifo_end - dma->fifo_pos) >= 2) { - *out_l = *out_r = *((uint16_t *) &dma->fifo[dma->fifo_pos & (sizeof(dma->fifo) - 1)]); + *out_l = *out_r = AS_U16(dma->fifo[dma->fifo_pos & (sizeof(dma->fifo) - 1)]); dma->fifo_pos += 2; dma->sample_count_out -= 2; goto n4spk3d; @@ -1192,9 +1192,9 @@ cmi8x38_poll(void *priv) switch (dma->channels) { case 2: if ((dma->fifo_end - dma->fifo_pos) >= 4) { - *out_l = *((uint16_t *) &dma->fifo[dma->fifo_pos & (sizeof(dma->fifo) - 1)]); + *out_l = AS_U16(dma->fifo[dma->fifo_pos & (sizeof(dma->fifo) - 1)]); dma->fifo_pos += 2; - *out_r = *((uint16_t *) &dma->fifo[dma->fifo_pos & (sizeof(dma->fifo) - 1)]); + *out_r = AS_U16(dma->fifo[dma->fifo_pos & (sizeof(dma->fifo) - 1)]); dma->fifo_pos += 2; dma->sample_count_out -= 4; goto n4spk3d; @@ -1203,13 +1203,13 @@ cmi8x38_poll(void *priv) case 4: if ((dma->fifo_end - dma->fifo_pos) >= 8) { - dma->out_fl = *((uint16_t *) &dma->fifo[dma->fifo_pos & (sizeof(dma->fifo) - 1)]); + dma->out_fl = AS_U16(dma->fifo[dma->fifo_pos & (sizeof(dma->fifo) - 1)]); dma->fifo_pos += 2; - dma->out_fr = *((uint16_t *) &dma->fifo[dma->fifo_pos & (sizeof(dma->fifo) - 1)]); + dma->out_fr = AS_U16(dma->fifo[dma->fifo_pos & (sizeof(dma->fifo) - 1)]); dma->fifo_pos += 2; - dma->out_rl = *((uint16_t *) &dma->fifo[dma->fifo_pos & (sizeof(dma->fifo) - 1)]); + dma->out_rl = AS_U16(dma->fifo[dma->fifo_pos & (sizeof(dma->fifo) - 1)]); dma->fifo_pos += 2; - dma->out_rr = *((uint16_t *) &dma->fifo[dma->fifo_pos & (sizeof(dma->fifo) - 1)]); + dma->out_rr = AS_U16(dma->fifo[dma->fifo_pos & (sizeof(dma->fifo) - 1)]); dma->fifo_pos += 2; dma->sample_count_out -= 8; return; @@ -1218,15 +1218,15 @@ cmi8x38_poll(void *priv) case 5: /* not supported by WDM and Linux drivers; channel layout assumed */ if ((dma->fifo_end - dma->fifo_pos) >= 10) { - dma->out_fl = *((uint16_t *) &dma->fifo[dma->fifo_pos & (sizeof(dma->fifo) - 1)]); + dma->out_fl = AS_U16(dma->fifo[dma->fifo_pos & (sizeof(dma->fifo) - 1)]); dma->fifo_pos += 2; - dma->out_fr = *((uint16_t *) &dma->fifo[dma->fifo_pos & (sizeof(dma->fifo) - 1)]); + dma->out_fr = AS_U16(dma->fifo[dma->fifo_pos & (sizeof(dma->fifo) - 1)]); dma->fifo_pos += 2; - dma->out_rl = *((uint16_t *) &dma->fifo[dma->fifo_pos & (sizeof(dma->fifo) - 1)]); + dma->out_rl = AS_U16(dma->fifo[dma->fifo_pos & (sizeof(dma->fifo) - 1)]); dma->fifo_pos += 2; - dma->out_rr = *((uint16_t *) &dma->fifo[dma->fifo_pos & (sizeof(dma->fifo) - 1)]); + dma->out_rr = AS_U16(dma->fifo[dma->fifo_pos & (sizeof(dma->fifo) - 1)]); dma->fifo_pos += 2; - dma->out_c = *((uint16_t *) &dma->fifo[dma->fifo_pos & (sizeof(dma->fifo) - 1)]); + dma->out_c = AS_U16(dma->fifo[dma->fifo_pos & (sizeof(dma->fifo) - 1)]); dma->fifo_pos += 2; dma->sample_count_out -= 10; return; @@ -1235,17 +1235,17 @@ cmi8x38_poll(void *priv) case 6: if ((dma->fifo_end - dma->fifo_pos) >= 12) { - dma->out_fl = *((uint16_t *) &dma->fifo[dma->fifo_pos & (sizeof(dma->fifo) - 1)]); + dma->out_fl = AS_U16(dma->fifo[dma->fifo_pos & (sizeof(dma->fifo) - 1)]); dma->fifo_pos += 2; - dma->out_fr = *((uint16_t *) &dma->fifo[dma->fifo_pos & (sizeof(dma->fifo) - 1)]); + dma->out_fr = AS_U16(dma->fifo[dma->fifo_pos & (sizeof(dma->fifo) - 1)]); dma->fifo_pos += 2; - dma->out_rl = *((uint16_t *) &dma->fifo[dma->fifo_pos & (sizeof(dma->fifo) - 1)]); + dma->out_rl = AS_U16(dma->fifo[dma->fifo_pos & (sizeof(dma->fifo) - 1)]); dma->fifo_pos += 2; - dma->out_rr = *((uint16_t *) &dma->fifo[dma->fifo_pos & (sizeof(dma->fifo) - 1)]); + dma->out_rr = AS_U16(dma->fifo[dma->fifo_pos & (sizeof(dma->fifo) - 1)]); dma->fifo_pos += 2; - dma->out_c = *((uint16_t *) &dma->fifo[dma->fifo_pos & (sizeof(dma->fifo) - 1)]); + dma->out_c = AS_U16(dma->fifo[dma->fifo_pos & (sizeof(dma->fifo) - 1)]); dma->fifo_pos += 2; - dma->out_lfe = *((uint16_t *) &dma->fifo[dma->fifo_pos & (sizeof(dma->fifo) - 1)]); + dma->out_lfe = AS_U16(dma->fifo[dma->fifo_pos & (sizeof(dma->fifo) - 1)]); dma->fifo_pos += 2; dma->sample_count_out -= 12; return; @@ -1265,7 +1265,7 @@ cmi8x38_poll(void *priv) *out_l = *out_r = 0; /* Stop playback if DMA is disabled. */ - if ((*((uint32_t *) &dev->io_regs[0x00]) & (0x00010001 << dma->id)) != (0x00010000 << dma->id)) { + if ((AS_U32(dev->io_regs[0x00]) & (0x00010001 << dma->id)) != (0x00010000 << dma->id)) { cmi8x38_log("CMI8x38: Stopping playback of DMA channel %d\n", dma->id); dma->playback_enabled = 0; } diff --git a/src/upi42.c b/src/upi42.c index 50f5c44c9..62111d889 100644 --- a/src/upi42.c +++ b/src/upi42.c @@ -875,7 +875,7 @@ upi42_exec(void *priv) } /* Fetch instruction. */ - uint32_t fetchdat = *((uint32_t *) &upi42->rom[upi42->pc]); + uint32_t fetchdat = AS_U32(upi42->rom[upi42->pc]); /* Decode instruction. */ uint8_t insn = fetchdat & 0xff; diff --git a/src/video/vid_mga.c b/src/video/vid_mga.c index 564136428..7dd9218cf 100644 --- a/src/video/vid_mga.c +++ b/src/video/vid_mga.c @@ -3753,10 +3753,10 @@ blit_iload_iload(mystique_t *mystique, uint32_t data, int size) case MACCESS_PWIDTH_24: if (mystique->dwgreg.xdst >= mystique->dwgreg.cxleft && mystique->dwgreg.xdst <= mystique->dwgreg.cxright && mystique->dwgreg.ydst_lin >= mystique->dwgreg.ytop && mystique->dwgreg.ydst_lin <= mystique->dwgreg.ybot) { - uint32_t old_dst = *((uint32_t *) &svga->vram[((mystique->dwgreg.ydst_lin + mystique->dwgreg.xdst) * 3) & mystique->vram_mask]); + uint32_t old_dst = AS_U32(svga->vram[((mystique->dwgreg.ydst_lin + mystique->dwgreg.xdst) * 3) & mystique->vram_mask]); dst = bitop(data64, old_dst, mystique->dwgreg.dwgctrl_running); - *((uint32_t *) &svga->vram[((mystique->dwgreg.ydst_lin + mystique->dwgreg.xdst) * 3) & mystique->vram_mask]) = (dst & 0xffffff) | (old_dst & 0xff000000); + AS_U32(svga->vram[((mystique->dwgreg.ydst_lin + mystique->dwgreg.xdst) * 3) & mystique->vram_mask]) = (dst & 0xffffff) | (old_dst & 0xff000000); svga->changedvram[(((mystique->dwgreg.ydst_lin + mystique->dwgreg.xdst) * 3) & mystique->vram_mask) >> 12] = changeframecount; }