* [Qemu-devel] [PATCH 1/5] target-alpha: Add placeholders for missing userspace PALcalls.
2009-12-14 1:56 [Qemu-devel] [PATCH 0/5] Alpha improvments, round 3 Richard Henderson
@ 2009-12-14 1:18 ` Richard Henderson
2009-12-14 1:46 ` [Qemu-devel] [PATCH 2/5] target-alpha: Implement fp branch/cmov inline Richard Henderson
` (3 subsequent siblings)
4 siblings, 0 replies; 6+ messages in thread
From: Richard Henderson @ 2009-12-14 1:18 UTC (permalink / raw)
To: qemu-devel
Signed-off-by: Richard Henderson <rth@twiddle.net>
---
hw/alpha_palcode.c | 32 ++++++++++++++++++++++++++++++--
1 files changed, 30 insertions(+), 2 deletions(-)
diff --git a/hw/alpha_palcode.c b/hw/alpha_palcode.c
index edec018..2a694dc 100644
--- a/hw/alpha_palcode.c
+++ b/hw/alpha_palcode.c
@@ -1061,6 +1061,16 @@ void call_pal (CPUState *env, int palcode)
target_long ret;
switch (palcode) {
+ case 0x80:
+ /* BPT */
+ qemu_log("BPT\n");
+ /* FIXME: Sends SIGTRAP, si_code=TRAP_BRKPT. */
+ exit(1);
+ case 0x81:
+ /* BUGCHK */
+ qemu_log("BUGCHK\n");
+ /* FIXME: Sends SIGTRAP, si_code=SI_FAULT. */
+ exit(1);
case 0x83:
/* CALLSYS */
qemu_log("CALLSYS n " TARGET_FMT_ld "\n", env->ir[0]);
@@ -1075,6 +1085,14 @@ void call_pal (CPUState *env, int palcode)
env->ir[IR_V0] = -ret;
}
break;
+ case 0x86:
+ /* IMB */
+ qemu_log("IMB\n");
+ /* ??? We can probably elide the code using page_unprotect that is
+ checking for self-modifying code. Instead we could simply call
+ tb_flush here. Until we work out the changes required to turn
+ off the extra write protection, this can be a no-op. */
+ break;
case 0x9E:
/* RDUNIQUE */
qemu_log("RDUNIQUE: " TARGET_FMT_lx "\n", env->unique);
@@ -1085,9 +1103,19 @@ void call_pal (CPUState *env, int palcode)
qemu_log("WRUNIQUE: " TARGET_FMT_lx "\n", env->ir[IR_A0]);
/* Handled in the translator for usermode. */
abort();
+ case 0xAA:
+ /* GENTRAP */
+ qemu_log("GENTRAP: " TARGET_FMT_lx "\n", env->ir[IR_A0]);
+ /* FIXME: This is supposed to send a signal:
+ SIGFPE:
+ GEN_INTOVF, GEN_INTDIV, GEN_FLTOVF, GEN_FLTDIV,
+ GEN_FLTUND, GEN_FLTINV, GEN_FLTINE, GEN_ROPRAND
+ SIGTRAP:
+ others
+ with various settings of si_code. */
+ exit(1);
default:
- qemu_log("%s: unhandled palcode %02x\n",
- __func__, palcode);
+ qemu_log("%s: unhandled palcode %02x\n", __func__, palcode);
exit(1);
}
}
--
1.6.5.2
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [Qemu-devel] [PATCH 2/5] target-alpha: Implement fp branch/cmov inline.
2009-12-14 1:56 [Qemu-devel] [PATCH 0/5] Alpha improvments, round 3 Richard Henderson
2009-12-14 1:18 ` [Qemu-devel] [PATCH 1/5] target-alpha: Add placeholders for missing userspace PALcalls Richard Henderson
@ 2009-12-14 1:46 ` Richard Henderson
2009-12-14 1:47 ` [Qemu-devel] [PATCH 3/5] target-alpha: Fix generic ctz64 Richard Henderson
` (2 subsequent siblings)
4 siblings, 0 replies; 6+ messages in thread
From: Richard Henderson @ 2009-12-14 1:46 UTC (permalink / raw)
To: qemu-devel
The old fcmov implementation had a typo:
- tcg_gen_mov_i64(cpu_fir[rc], cpu_fir[ra]);
which moved the condition, not the second source, to the destination.
But it's also easy to implement the simplified fp comparison inline.
Signed-off-by: Richard Henderson <rth@twiddle.net>
---
target-alpha/helper.h | 7 --
target-alpha/op_helper.c | 31 -------
target-alpha/translate.c | 197 ++++++++++++++++++++++++++--------------------
3 files changed, 110 insertions(+), 125 deletions(-)
diff --git a/target-alpha/helper.h b/target-alpha/helper.h
index 4eb3b6f..bedd3c0 100644
--- a/target-alpha/helper.h
+++ b/target-alpha/helper.h
@@ -77,13 +77,6 @@ DEF_HELPER_2(cmpgeq, i64, i64, i64)
DEF_HELPER_2(cmpgle, i64, i64, i64)
DEF_HELPER_2(cmpglt, i64, i64, i64)
-DEF_HELPER_1(cmpfeq, i64, i64)
-DEF_HELPER_1(cmpfne, i64, i64)
-DEF_HELPER_1(cmpflt, i64, i64)
-DEF_HELPER_1(cmpfle, i64, i64)
-DEF_HELPER_1(cmpfgt, i64, i64)
-DEF_HELPER_1(cmpfge, i64, i64)
-
DEF_HELPER_2(cpys, i64, i64, i64)
DEF_HELPER_2(cpysn, i64, i64, i64)
DEF_HELPER_2(cpyse, i64, i64, i64)
diff --git a/target-alpha/op_helper.c b/target-alpha/op_helper.c
index d7f4fb2..8eba5ec 100644
--- a/target-alpha/op_helper.c
+++ b/target-alpha/op_helper.c
@@ -884,37 +884,6 @@ uint64_t helper_cmpglt(uint64_t a, uint64_t b)
return 0;
}
-uint64_t helper_cmpfeq (uint64_t a)
-{
- return !(a & 0x7FFFFFFFFFFFFFFFULL);
-}
-
-uint64_t helper_cmpfne (uint64_t a)
-{
- return (a & 0x7FFFFFFFFFFFFFFFULL);
-}
-
-uint64_t helper_cmpflt (uint64_t a)
-{
- return (a & 0x8000000000000000ULL) && (a & 0x7FFFFFFFFFFFFFFFULL);
-}
-
-uint64_t helper_cmpfle (uint64_t a)
-{
- return (a & 0x8000000000000000ULL) || !(a & 0x7FFFFFFFFFFFFFFFULL);
-}
-
-uint64_t helper_cmpfgt (uint64_t a)
-{
- return !(a & 0x8000000000000000ULL) && (a & 0x7FFFFFFFFFFFFFFFULL);
-}
-
-uint64_t helper_cmpfge (uint64_t a)
-{
- return !(a & 0x8000000000000000ULL) || !(a & 0x7FFFFFFFFFFFFFFFULL);
-}
-
-
/* Floating point format conversion */
uint64_t helper_cvtts (uint64_t a)
{
diff --git a/target-alpha/translate.c b/target-alpha/translate.c
index f9537c9..be7e7bf 100644
--- a/target-alpha/translate.c
+++ b/target-alpha/translate.c
@@ -294,77 +294,98 @@ static inline void gen_store_mem(DisasContext *ctx,
tcg_temp_free(addr);
}
-static inline void gen_bcond(DisasContext *ctx, TCGCond cond, int ra,
- int32_t disp, int mask)
+static void gen_bcond_pcload(DisasContext *ctx, int32_t disp, int lab_true)
{
- int l1, l2;
+ int lab_over = gen_new_label();
+
+ tcg_gen_movi_i64(cpu_pc, ctx->pc);
+ tcg_gen_br(lab_over);
+ gen_set_label(lab_true);
+ tcg_gen_movi_i64(cpu_pc, ctx->pc + (int64_t)(disp << 2));
+ gen_set_label(lab_over);
+}
+
+static void gen_bcond(DisasContext *ctx, TCGCond cond, int ra,
+ int32_t disp, int mask)
+{
+ int lab_true = gen_new_label();
- l1 = gen_new_label();
- l2 = gen_new_label();
if (likely(ra != 31)) {
if (mask) {
TCGv tmp = tcg_temp_new();
tcg_gen_andi_i64(tmp, cpu_ir[ra], 1);
- tcg_gen_brcondi_i64(cond, tmp, 0, l1);
+ tcg_gen_brcondi_i64(cond, tmp, 0, lab_true);
tcg_temp_free(tmp);
- } else
- tcg_gen_brcondi_i64(cond, cpu_ir[ra], 0, l1);
+ } else {
+ tcg_gen_brcondi_i64(cond, cpu_ir[ra], 0, lab_true);
+ }
} else {
/* Very uncommon case - Do not bother to optimize. */
TCGv tmp = tcg_const_i64(0);
- tcg_gen_brcondi_i64(cond, tmp, 0, l1);
+ tcg_gen_brcondi_i64(cond, tmp, 0, lab_true);
tcg_temp_free(tmp);
}
- tcg_gen_movi_i64(cpu_pc, ctx->pc);
- tcg_gen_br(l2);
- gen_set_label(l1);
- tcg_gen_movi_i64(cpu_pc, ctx->pc + (int64_t)(disp << 2));
- gen_set_label(l2);
+ gen_bcond_pcload(ctx, disp, lab_true);
}
-static inline void gen_fbcond(DisasContext *ctx, int opc, int ra, int32_t disp)
+/* Generate a forward TCG branch to LAB_TRUE if RA cmp 0.0.
+ This is complicated by the fact that -0.0 compares the same as +0.0. */
+
+static void gen_fbcond_internal(TCGCond cond, TCGv src, int lab_true)
{
- int l1, l2;
+ int lab_false = -1;
+ uint64_t mzero = 1ull << 63;
TCGv tmp;
- TCGv src;
-
- l1 = gen_new_label();
- l2 = gen_new_label();
- if (ra != 31) {
+
+ switch (cond) {
+ case TCG_COND_LE:
+ case TCG_COND_GT:
+ /* For <= or >, the -0.0 value directly compares the way we want. */
+ tcg_gen_brcondi_i64(cond, src, 0, lab_true);
+ break;
+
+ case TCG_COND_EQ:
+ case TCG_COND_NE:
+ /* For == or !=, we can simply mask off the sign bit and compare. */
+ /* ??? Assume that the temporary is reclaimed at the branch. */
tmp = tcg_temp_new();
- src = cpu_fir[ra];
- } else {
- tmp = tcg_const_i64(0);
- src = tmp;
- }
- switch (opc) {
- case 0x31: /* FBEQ */
- gen_helper_cmpfeq(tmp, src);
- break;
- case 0x32: /* FBLT */
- gen_helper_cmpflt(tmp, src);
- break;
- case 0x33: /* FBLE */
- gen_helper_cmpfle(tmp, src);
- break;
- case 0x35: /* FBNE */
- gen_helper_cmpfne(tmp, src);
+ tcg_gen_andi_i64(tmp, src, mzero - 1);
+ tcg_gen_brcondi_i64(cond, tmp, 0, lab_true);
break;
- case 0x36: /* FBGE */
- gen_helper_cmpfge(tmp, src);
+
+ case TCG_COND_GE:
+ /* For >=, emit two branches to the destination. */
+ tcg_gen_brcondi_i64(cond, src, 0, lab_true);
+ tcg_gen_brcondi_i64(TCG_COND_EQ, src, mzero, lab_true);
break;
- case 0x37: /* FBGT */
- gen_helper_cmpfgt(tmp, src);
+
+ case TCG_COND_LT:
+ /* For <, first filter out -0.0 to what will be the fallthru. */
+ lab_false = gen_new_label();
+ tcg_gen_brcondi_i64(TCG_COND_EQ, src, mzero, lab_false);
+ tcg_gen_brcondi_i64(cond, src, 0, lab_true);
+ gen_set_label(lab_false);
break;
+
default:
abort();
}
- tcg_gen_brcondi_i64(TCG_COND_NE, tmp, 0, l1);
- tcg_gen_movi_i64(cpu_pc, ctx->pc);
- tcg_gen_br(l2);
- gen_set_label(l1);
- tcg_gen_movi_i64(cpu_pc, ctx->pc + (int64_t)(disp << 2));
- gen_set_label(l2);
+}
+
+static void gen_fbcond(DisasContext *ctx, TCGCond cond, int ra, int32_t disp)
+{
+ int lab_true;
+
+ if (unlikely(ra == 31)) {
+ /* Very uncommon case, but easier to optimize it to an integer
+ comparison than continuing with the floating point comparison. */
+ gen_bcond(ctx, cond, ra, disp, 0);
+ return;
+ }
+
+ lab_true = gen_new_label();
+ gen_fbcond_internal(cond, cpu_fir[ra], lab_true);
+ gen_bcond_pcload(ctx, disp, lab_true);
}
static inline void gen_cmov(TCGCond inv_cond, int ra, int rb, int rc,
@@ -399,6 +420,28 @@ static inline void gen_cmov(TCGCond inv_cond, int ra, int rb, int rc,
gen_set_label(l1);
}
+static void gen_fcmov(TCGCond inv_cond, int ra, int rb, int rc)
+{
+ TCGv va = cpu_fir[ra];
+ int l1;
+
+ if (unlikely(rc == 31))
+ return;
+ if (unlikely(ra == 31)) {
+ /* ??? Assume that the temporary is reclaimed at the branch. */
+ va = tcg_const_i64(0);
+ }
+
+ l1 = gen_new_label();
+ gen_fbcond_internal(inv_cond, va, l1);
+
+ if (rb != 31)
+ tcg_gen_mov_i64(cpu_fir[rc], cpu_fir[rb]);
+ else
+ tcg_gen_movi_i64(cpu_fir[rc], 0);
+ gen_set_label(l1);
+}
+
#define FARITH2(name) \
static inline void glue(gen_f, name)(int rb, int rc) \
{ \
@@ -482,38 +525,6 @@ FARITH3(cpys)
FARITH3(cpysn)
FARITH3(cpyse)
-#define FCMOV(name) \
-static inline void glue(gen_f, name)(int ra, int rb, int rc) \
-{ \
- int l1; \
- TCGv tmp; \
- \
- if (unlikely(rc == 31)) \
- return; \
- \
- l1 = gen_new_label(); \
- tmp = tcg_temp_new(); \
- if (ra != 31) { \
- tmp = tcg_temp_new(); \
- gen_helper_ ## name (tmp, cpu_fir[ra]); \
- } else { \
- tmp = tcg_const_i64(0); \
- gen_helper_ ## name (tmp, tmp); \
- } \
- tcg_gen_brcondi_i64(TCG_COND_EQ, tmp, 0, l1); \
- if (rb != 31) \
- tcg_gen_mov_i64(cpu_fir[rc], cpu_fir[ra]); \
- else \
- tcg_gen_movi_i64(cpu_fir[rc], 0); \
- gen_set_label(l1); \
-}
-FCMOV(cmpfeq)
-FCMOV(cmpfne)
-FCMOV(cmpflt)
-FCMOV(cmpfge)
-FCMOV(cmpfle)
-FCMOV(cmpfgt)
-
static inline uint64_t zapnot_mask(uint8_t lit)
{
uint64_t mask = 0;
@@ -1871,27 +1882,27 @@ static inline int translate_one(DisasContext *ctx, uint32_t insn)
break;
case 0x02A:
/* FCMOVEQ */
- gen_fcmpfeq(ra, rb, rc);
+ gen_fcmov(TCG_COND_NE, ra, rb, rc);
break;
case 0x02B:
/* FCMOVNE */
- gen_fcmpfne(ra, rb, rc);
+ gen_fcmov(TCG_COND_EQ, ra, rb, rc);
break;
case 0x02C:
/* FCMOVLT */
- gen_fcmpflt(ra, rb, rc);
+ gen_fcmov(TCG_COND_GE, ra, rb, rc);
break;
case 0x02D:
/* FCMOVGE */
- gen_fcmpfge(ra, rb, rc);
+ gen_fcmov(TCG_COND_LT, ra, rb, rc);
break;
case 0x02E:
/* FCMOVLE */
- gen_fcmpfle(ra, rb, rc);
+ gen_fcmov(TCG_COND_GT, ra, rb, rc);
break;
case 0x02F:
/* FCMOVGT */
- gen_fcmpfgt(ra, rb, rc);
+ gen_fcmov(TCG_COND_LE, ra, rb, rc);
break;
case 0x030:
/* CVTQL */
@@ -2482,9 +2493,15 @@ static inline int translate_one(DisasContext *ctx, uint32_t insn)
ret = 1;
break;
case 0x31: /* FBEQ */
+ gen_fbcond(ctx, TCG_COND_EQ, ra, disp21);
+ ret = 1;
+ break;
case 0x32: /* FBLT */
+ gen_fbcond(ctx, TCG_COND_LT, ra, disp21);
+ ret = 1;
+ break;
case 0x33: /* FBLE */
- gen_fbcond(ctx, opc, ra, disp21);
+ gen_fbcond(ctx, TCG_COND_LE, ra, disp21);
ret = 1;
break;
case 0x34:
@@ -2495,9 +2512,15 @@ static inline int translate_one(DisasContext *ctx, uint32_t insn)
ret = 1;
break;
case 0x35: /* FBNE */
+ gen_fbcond(ctx, TCG_COND_NE, ra, disp21);
+ ret = 1;
+ break;
case 0x36: /* FBGE */
+ gen_fbcond(ctx, TCG_COND_GE, ra, disp21);
+ ret = 1;
+ break;
case 0x37: /* FBGT */
- gen_fbcond(ctx, opc, ra, disp21);
+ gen_fbcond(ctx, TCG_COND_GT, ra, disp21);
ret = 1;
break;
case 0x38:
--
1.6.5.2
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [Qemu-devel] [PATCH 3/5] target-alpha: Fix generic ctz64.
2009-12-14 1:56 [Qemu-devel] [PATCH 0/5] Alpha improvments, round 3 Richard Henderson
2009-12-14 1:18 ` [Qemu-devel] [PATCH 1/5] target-alpha: Add placeholders for missing userspace PALcalls Richard Henderson
2009-12-14 1:46 ` [Qemu-devel] [PATCH 2/5] target-alpha: Implement fp branch/cmov inline Richard Henderson
@ 2009-12-14 1:47 ` Richard Henderson
2009-12-14 1:48 ` [Qemu-devel] [PATCH 4/5] target-alpha: Fix cvtlq Richard Henderson
2009-12-14 1:50 ` [Qemu-devel] [PATCH 5/5] target-alpha: Fix float32_to_s vs zero exponent Richard Henderson
4 siblings, 0 replies; 6+ messages in thread
From: Richard Henderson @ 2009-12-14 1:47 UTC (permalink / raw)
To: qemu-devel
Signed-off-by: Richard Henderson <rth@twiddle.net>
---
host-utils.h | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/host-utils.h b/host-utils.h
index e335c5c..0ddc176 100644
--- a/host-utils.h
+++ b/host-utils.h
@@ -164,7 +164,7 @@ static inline int ctz64(uint64_t val)
{
#if QEMU_GNUC_PREREQ(3, 4)
if (val)
- return __builtin_ctz(val);
+ return __builtin_ctzll(val);
else
return 64;
#else
--
1.6.5.2
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [Qemu-devel] [PATCH 4/5] target-alpha: Fix cvtlq.
2009-12-14 1:56 [Qemu-devel] [PATCH 0/5] Alpha improvments, round 3 Richard Henderson
` (2 preceding siblings ...)
2009-12-14 1:47 ` [Qemu-devel] [PATCH 3/5] target-alpha: Fix generic ctz64 Richard Henderson
@ 2009-12-14 1:48 ` Richard Henderson
2009-12-14 1:50 ` [Qemu-devel] [PATCH 5/5] target-alpha: Fix float32_to_s vs zero exponent Richard Henderson
4 siblings, 0 replies; 6+ messages in thread
From: Richard Henderson @ 2009-12-14 1:48 UTC (permalink / raw)
To: qemu-devel
We were missing the 0xc0000000 mask, leading to incorrect results.
Signed-off-by: Richard Henderson <rth@twiddle.net>
---
target-alpha/op_helper.c | 4 +++-
1 files changed, 3 insertions(+), 1 deletions(-)
diff --git a/target-alpha/op_helper.c b/target-alpha/op_helper.c
index 8eba5ec..ff120ad 100644
--- a/target-alpha/op_helper.c
+++ b/target-alpha/op_helper.c
@@ -954,7 +954,9 @@ uint64_t helper_cvtqg (uint64_t a)
uint64_t helper_cvtlq (uint64_t a)
{
- return (int64_t)((int32_t)((a >> 32) | ((a >> 29) & 0x3FFFFFFF)));
+ int32_t lo = a >> 29;
+ int32_t hi = a >> 32;
+ return (lo & 0x3FFFFFFF) | (hi & 0xc0000000);
}
static inline uint64_t __helper_cvtql(uint64_t a, int s, int v)
--
1.6.5.2
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [Qemu-devel] [PATCH 5/5] target-alpha: Fix float32_to_s vs zero exponent.
2009-12-14 1:56 [Qemu-devel] [PATCH 0/5] Alpha improvments, round 3 Richard Henderson
` (3 preceding siblings ...)
2009-12-14 1:48 ` [Qemu-devel] [PATCH 4/5] target-alpha: Fix cvtlq Richard Henderson
@ 2009-12-14 1:50 ` Richard Henderson
4 siblings, 0 replies; 6+ messages in thread
From: Richard Henderson @ 2009-12-14 1:50 UTC (permalink / raw)
To: qemu-devel
There was a bug in float32_to_s that incorrectly mapped a zero exponent
to 0x38. This meant 0.0f != 0. At the same time, fix a generic type
punning bug in helper_memory_to_s and helper_s_to_memory.
Signed-off-by: Richard Henderson <rth@twiddle.net>
---
target-alpha/op_helper.c | 44 ++++++++++++++++++++++++++++++++------------
1 files changed, 32 insertions(+), 12 deletions(-)
diff --git a/target-alpha/op_helper.c b/target-alpha/op_helper.c
index ff120ad..b2abf6c 100644
--- a/target-alpha/op_helper.c
+++ b/target-alpha/op_helper.c
@@ -625,37 +625,57 @@ uint64_t helper_sqrtg (uint64_t a)
/* S floating (single) */
+
+/* Taken from linux/arch/alpha/kernel/traps.c, s_mem_to_reg. */
+static inline uint64_t float32_to_s_int(uint32_t fi)
+{
+ uint32_t frac = fi & 0x7fffff;
+ uint32_t sign = fi >> 31;
+ uint32_t exp_msb = (fi >> 30) & 1;
+ uint32_t exp_low = (fi >> 23) & 0x7f;
+ uint32_t exp;
+
+ exp = (exp_msb << 10) | exp_low;
+ if (exp_msb) {
+ if (exp_low == 0x7f)
+ exp = 0x7ff;
+ } else {
+ if (exp_low != 0x00)
+ exp |= 0x380;
+ }
+
+ return (((uint64_t)sign << 63)
+ | ((uint64_t)exp << 52)
+ | ((uint64_t)frac << 29));
+}
+
static inline uint64_t float32_to_s(float32 fa)
{
CPU_FloatU a;
- uint64_t r;
-
a.f = fa;
+ return float32_to_s_int(a.l);
+}
- r = (((uint64_t)(a.l & 0xc0000000)) << 32) | (((uint64_t)(a.l & 0x3fffffff)) << 29);
- if (((a.l & 0x7f800000) != 0x7f800000) && (!(a.l & 0x40000000)))
- r |= 0x7ll << 59;
- return r;
+static inline uint32_t s_to_float32_int(uint64_t a)
+{
+ return ((a >> 32) & 0xc0000000) | ((a >> 29) & 0x3fffffff);
}
static inline float32 s_to_float32(uint64_t a)
{
CPU_FloatU r;
- r.l = ((a >> 32) & 0xc0000000) | ((a >> 29) & 0x3fffffff);
+ r.l = s_to_float32_int(a);
return r.f;
}
uint32_t helper_s_to_memory (uint64_t a)
{
- /* Memory format is the same as float32 */
- float32 fa = s_to_float32(a);
- return *(uint32_t*)(&fa);
+ return s_to_float32_int(a);
}
uint64_t helper_memory_to_s (uint32_t a)
{
- /* Memory format is the same as float32 */
- return float32_to_s(*(float32*)(&a));
+ return float32_to_s_int(a);
}
uint64_t helper_adds (uint64_t a, uint64_t b)
--
1.6.5.2
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [Qemu-devel] [PATCH 0/5] Alpha improvments, round 3
@ 2009-12-14 1:56 Richard Henderson
2009-12-14 1:18 ` [Qemu-devel] [PATCH 1/5] target-alpha: Add placeholders for missing userspace PALcalls Richard Henderson
` (4 more replies)
0 siblings, 5 replies; 6+ messages in thread
From: Richard Henderson @ 2009-12-14 1:56 UTC (permalink / raw)
To: qemu-devel
The first is the IMB patch, adjusted for Aurelien's comments.
The third is a bug in a generic header; I'm not sure what the
proper tagging is for that sort of thing.
The rest are new bugs found in the Alpha backend via the gcc
testsuite. We're down to a handfull of failures over native
there. I hope to post an approach to the rounding mode issue
shortly.
r~
Richard Henderson (5):
target-alpha: Add placeholders for missing userspace PALcalls.
target-alpha: Implement fp branch/cmov inline.
target-alpha: Fix generic ctz64.
target-alpha: Fix cvtlq.
target-alpha: Fix float32_to_s vs zero exponent.
host-utils.h | 2 +-
hw/alpha_palcode.c | 32 +++++++-
target-alpha/helper.h | 7 --
target-alpha/op_helper.c | 79 ++++++++----------
target-alpha/translate.c | 197 ++++++++++++++++++++++++++--------------------
5 files changed, 176 insertions(+), 141 deletions(-)
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2009-12-14 2:34 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-12-14 1:56 [Qemu-devel] [PATCH 0/5] Alpha improvments, round 3 Richard Henderson
2009-12-14 1:18 ` [Qemu-devel] [PATCH 1/5] target-alpha: Add placeholders for missing userspace PALcalls Richard Henderson
2009-12-14 1:46 ` [Qemu-devel] [PATCH 2/5] target-alpha: Implement fp branch/cmov inline Richard Henderson
2009-12-14 1:47 ` [Qemu-devel] [PATCH 3/5] target-alpha: Fix generic ctz64 Richard Henderson
2009-12-14 1:48 ` [Qemu-devel] [PATCH 4/5] target-alpha: Fix cvtlq Richard Henderson
2009-12-14 1:50 ` [Qemu-devel] [PATCH 5/5] target-alpha: Fix float32_to_s vs zero exponent Richard Henderson
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).