Applied all recent PCem commits.

This commit is contained in:
OBattler
2017-11-27 22:45:31 +01:00
parent 6eca46e613
commit 8a3f64e032
4 changed files with 26 additions and 16 deletions

View File

@@ -884,9 +884,9 @@ static inline void CHECK_SEG_READ(x86seg *seg)
addbyte(0xe8 | REG_ESI);
addbyte(0xff);
}
addbyte(0x0f); /*JE end*/
addbyte(0x0f); /*JE GPF_BLOCK_OFFSET*/
addbyte(0x84);
addlong(BLOCK_EXIT_OFFSET - (block_pos + 4));
addlong(BLOCK_GPF_OFFSET - (block_pos + 4));
seg->checked = 1;
}
@@ -920,9 +920,9 @@ static inline void CHECK_SEG_WRITE(x86seg *seg)
addbyte(0xe8 | REG_ESI);
addbyte(0xff);
}
addbyte(0x0f); /*JE end*/
addbyte(0x0f); /*JE GPF_BLOCK_OFFSET*/
addbyte(0x84);
addlong(BLOCK_EXIT_OFFSET - (block_pos + 4));
addlong(BLOCK_GPF_OFFSET - (block_pos + 4));
seg->checked = 1;
}

View File

@@ -626,8 +626,8 @@ static inline void CHECK_SEG_READ(x86seg *seg)
addlong((uint32_t)&seg->base);
addbyte(-1);
addbyte(0x0f);
addbyte(0x84); /*JE end*/
addlong(BLOCK_EXIT_OFFSET - (block_pos + 4));
addbyte(0x84); /*JE BLOCK_GPF_OFFSET*/
addlong(BLOCK_GPF_OFFSET - (block_pos + 4));
seg->checked = 1;
}
@@ -649,8 +649,8 @@ static inline void CHECK_SEG_WRITE(x86seg *seg)
addlong((uint32_t)&seg->base);
addbyte(-1);
addbyte(0x0f);
addbyte(0x84); /*JE end*/
addlong(BLOCK_EXIT_OFFSET - (block_pos + 4));
addbyte(0x84); /*JE BLOCK_GPF_OFFSET*/
addlong(BLOCK_GPF_OFFSET - (block_pos + 4));
seg->checked = 1;
}

View File

@@ -1909,6 +1909,7 @@ static void s3_virge_bitblt(virge_t *virge, int count, uint32_t cpu_dat)
int x_mul;
int cpu_dat_shift;
uint32_t *pattern_data;
uint32_t src_fg_clr, src_bg_clr;
uint32_t src_addr;
uint32_t dest_addr;
uint32_t source = 0, dest = 0, pattern;
@@ -1922,12 +1923,16 @@ static void s3_virge_bitblt(virge_t *virge, int count, uint32_t cpu_dat)
x_mul = 1;
cpu_dat_shift = 8;
pattern_data = virge->s3d.pattern_8;
src_fg_clr = virge->s3d.src_fg_clr & 0xff;
src_bg_clr = virge->s3d.src_bg_clr & 0xff;
break;
case CMD_SET_FORMAT_16:
bpp = 1;
x_mul = 2;
cpu_dat_shift = 16;
pattern_data = virge->s3d.pattern_16;
src_fg_clr = virge->s3d.src_fg_clr & 0xffff;
src_bg_clr = virge->s3d.src_bg_clr & 0xffff;
break;
case CMD_SET_FORMAT_24:
default:
@@ -1935,6 +1940,8 @@ static void s3_virge_bitblt(virge_t *virge, int count, uint32_t cpu_dat)
x_mul = 3;
cpu_dat_shift = 24;
pattern_data = virge->s3d.pattern_32;
src_fg_clr = virge->s3d.src_fg_clr;
src_bg_clr = virge->s3d.src_bg_clr;
break;
}
if (virge->s3d.cmd_set & CMD_SET_MP)
@@ -2016,7 +2023,7 @@ static void s3_virge_bitblt(virge_t *virge, int count, uint32_t cpu_dat)
case 0:
case CMD_SET_MS:
READ(src_addr, source);
if ((virge->s3d.cmd_set & CMD_SET_TP) && source == virge->s3d.src_fg_clr)
if ((virge->s3d.cmd_set & CMD_SET_TP) && source == src_fg_clr)
update = 0;
break;
case CMD_SET_IDS:
@@ -2047,11 +2054,11 @@ static void s3_virge_bitblt(virge_t *virge, int count, uint32_t cpu_dat)
count = 0;
}
}
if ((virge->s3d.cmd_set & CMD_SET_TP) && source == virge->s3d.src_fg_clr)
if ((virge->s3d.cmd_set & CMD_SET_TP) && source == src_fg_clr)
update = 0;
break;
case CMD_SET_IDS | CMD_SET_MS:
source = (cpu_dat & (1 << 31)) ? virge->s3d.src_fg_clr : virge->s3d.src_bg_clr;
source = (cpu_dat & (1 << 31)) ? src_fg_clr : src_bg_clr;
if ((virge->s3d.cmd_set & CMD_SET_TP) && !(cpu_dat & (1 << 31)))
update = 0;
cpu_dat <<= 1;

View File

@@ -331,6 +331,7 @@ typedef struct voodoo_t
fifo_entry_t fifo[FIFO_SIZE];
volatile int fifo_read_idx, fifo_write_idx;
int cmd_read, cmd_written;
volatile int cmd_read, cmd_written, cmd_written_fifo;
voodoo_params_t params_buffer[PARAM_SIZE];
volatile int params_read_idx[2], params_write_idx;
@@ -6023,17 +6024,19 @@ static uint32_t voodoo_readl(uint32_t addr, void *p)
{
int fifo_entries = FIFO_ENTRIES;
int swap_count = voodoo->swap_count;
int busy = (voodoo->cmd_written - voodoo->cmd_read) || (voodoo->cmdfifo_depth_rd != voodoo->cmdfifo_depth_wr);
int written = voodoo->cmd_written + voodoo->cmd_written_fifo;
int busy = (written - voodoo->cmd_read) || (voodoo->cmdfifo_depth_rd != voodoo->cmdfifo_depth_wr);
if (SLI_ENABLED && voodoo->type != VOODOO_2)
{
voodoo_t *voodoo_other = (voodoo == voodoo->set->voodoos[0]) ? voodoo->set->voodoos[1] : voodoo->set->voodoos[0];
int other_written = voodoo_other->cmd_written + voodoo_other->cmd_written_fifo;
if (voodoo_other->swap_count > swap_count)
swap_count = voodoo_other->swap_count;
if ((voodoo_other->fifo_write_idx - voodoo_other->fifo_read_idx) > fifo_entries)
fifo_entries = voodoo_other->fifo_write_idx - voodoo_other->fifo_read_idx;
if ((voodoo_other->cmd_written - voodoo_other->cmd_read) ||
if ((other_written - voodoo_other->cmd_read) ||
(voodoo_other->cmdfifo_depth_rd != voodoo_other->cmdfifo_depth_wr))
busy = 1;
if (!voodoo_other->voodoo_busy)
@@ -6651,7 +6654,7 @@ static void fifo_thread(void *param)
uint32_t val = cmdfifo_get(voodoo);
if ((addr & 0x3ff) == SST_triangleCMD || (addr & 0x3ff) == SST_ftriangleCMD ||
(addr & 0x3ff) == SST_fastfillCMD || (addr & 0x3ff) == SST_nopCMD)
voodoo->cmd_written++;
voodoo->cmd_written_fifo++;
voodoo_reg_writel(addr, val, voodoo);
@@ -6735,7 +6738,7 @@ static void fifo_thread(void *param)
uint32_t val = cmdfifo_get(voodoo);
if ((addr & 0x3ff) == SST_triangleCMD || (addr & 0x3ff) == SST_ftriangleCMD ||
(addr & 0x3ff) == SST_fastfillCMD || (addr & 0x3ff) == SST_nopCMD)
voodoo->cmd_written++;
voodoo->cmd_written_fifo++;
voodoo_reg_writel(addr, val, voodoo);
}