mirror of https://github.com/xqemu/xqemu.git
Merge remote branch 'origin/master' into staging
This commit is contained in:
commit
c84995c50b
|
@ -2055,6 +2055,85 @@ float32 float32_sqrt( float32 a STATUS_PARAM )
|
|||
|
||||
}
|
||||
|
||||
/*----------------------------------------------------------------------------
|
||||
| Returns the binary exponential of the single-precision floating-point value
|
||||
| `a'. The operation is performed according to the IEC/IEEE Standard for
|
||||
| Binary Floating-Point Arithmetic.
|
||||
|
|
||||
| Uses the following identities:
|
||||
|
|
||||
| 1. -------------------------------------------------------------------------
|
||||
| x x*ln(2)
|
||||
| 2 = e
|
||||
|
|
||||
| 2. -------------------------------------------------------------------------
|
||||
| 2 3 4 5 n
|
||||
| x x x x x x x
|
||||
| e = 1 + --- + --- + --- + --- + --- + ... + --- + ...
|
||||
| 1! 2! 3! 4! 5! n!
|
||||
*----------------------------------------------------------------------------*/
|
||||
|
||||
static const float64 float32_exp2_coefficients[15] =
|
||||
{
|
||||
make_float64( 0x3ff0000000000000ll ), /* 1 */
|
||||
make_float64( 0x3fe0000000000000ll ), /* 2 */
|
||||
make_float64( 0x3fc5555555555555ll ), /* 3 */
|
||||
make_float64( 0x3fa5555555555555ll ), /* 4 */
|
||||
make_float64( 0x3f81111111111111ll ), /* 5 */
|
||||
make_float64( 0x3f56c16c16c16c17ll ), /* 6 */
|
||||
make_float64( 0x3f2a01a01a01a01all ), /* 7 */
|
||||
make_float64( 0x3efa01a01a01a01all ), /* 8 */
|
||||
make_float64( 0x3ec71de3a556c734ll ), /* 9 */
|
||||
make_float64( 0x3e927e4fb7789f5cll ), /* 10 */
|
||||
make_float64( 0x3e5ae64567f544e4ll ), /* 11 */
|
||||
make_float64( 0x3e21eed8eff8d898ll ), /* 12 */
|
||||
make_float64( 0x3de6124613a86d09ll ), /* 13 */
|
||||
make_float64( 0x3da93974a8c07c9dll ), /* 14 */
|
||||
make_float64( 0x3d6ae7f3e733b81fll ), /* 15 */
|
||||
};
|
||||
|
||||
float32 float32_exp2( float32 a STATUS_PARAM )
|
||||
{
|
||||
flag aSign;
|
||||
int16 aExp;
|
||||
bits32 aSig;
|
||||
float64 r, x, xn;
|
||||
int i;
|
||||
|
||||
aSig = extractFloat32Frac( a );
|
||||
aExp = extractFloat32Exp( a );
|
||||
aSign = extractFloat32Sign( a );
|
||||
|
||||
if ( aExp == 0xFF) {
|
||||
if ( aSig ) return propagateFloat32NaN( a, float32_zero STATUS_VAR );
|
||||
return (aSign) ? float32_zero : a;
|
||||
}
|
||||
if (aExp == 0) {
|
||||
if (aSig == 0) return float32_one;
|
||||
}
|
||||
|
||||
float_raise( float_flag_inexact STATUS_VAR);
|
||||
|
||||
/* ******************************* */
|
||||
/* using float64 for approximation */
|
||||
/* ******************************* */
|
||||
x = float32_to_float64(a STATUS_VAR);
|
||||
x = float64_mul(x, float64_ln2 STATUS_VAR);
|
||||
|
||||
xn = x;
|
||||
r = float64_one;
|
||||
for (i = 0 ; i < 15 ; i++) {
|
||||
float64 f;
|
||||
|
||||
f = float64_mul(xn, float32_exp2_coefficients[i] STATUS_VAR);
|
||||
r = float64_add(r, f STATUS_VAR);
|
||||
|
||||
xn = float64_mul(xn, x STATUS_VAR);
|
||||
}
|
||||
|
||||
return float64_to_float32(r, status);
|
||||
}
|
||||
|
||||
/*----------------------------------------------------------------------------
|
||||
| Returns the binary log of the single-precision floating-point value `a'.
|
||||
| The operation is performed according to the IEC/IEEE Standard for Binary
|
||||
|
|
|
@ -275,6 +275,7 @@ float32 float32_mul( float32, float32 STATUS_PARAM );
|
|||
float32 float32_div( float32, float32 STATUS_PARAM );
|
||||
float32 float32_rem( float32, float32 STATUS_PARAM );
|
||||
float32 float32_sqrt( float32 STATUS_PARAM );
|
||||
float32 float32_exp2( float32 STATUS_PARAM );
|
||||
float32 float32_log2( float32 STATUS_PARAM );
|
||||
int float32_eq( float32, float32 STATUS_PARAM );
|
||||
int float32_le( float32, float32 STATUS_PARAM );
|
||||
|
@ -315,6 +316,7 @@ INLINE int float32_is_zero(float32 a)
|
|||
|
||||
#define float32_zero make_float32(0)
|
||||
#define float32_one make_float32(0x3f800000)
|
||||
#define float32_ln2 make_float32(0x3f317218)
|
||||
|
||||
/*----------------------------------------------------------------------------
|
||||
| Software IEC/IEEE double-precision conversion routines.
|
||||
|
@ -386,6 +388,7 @@ INLINE int float64_is_zero(float64 a)
|
|||
|
||||
#define float64_zero make_float64(0)
|
||||
#define float64_one make_float64(0x3ff0000000000000LL)
|
||||
#define float64_ln2 make_float64(0x3fe62e42fefa39efLL)
|
||||
|
||||
#ifdef FLOATX80
|
||||
|
||||
|
|
|
@ -775,7 +775,6 @@ PCIBus *bonito_init(qemu_irq *pic)
|
|||
pci_bonito_map_irq, pic, 0x28, 32);
|
||||
pcihost->bus = b;
|
||||
qdev_init_nofail(dev);
|
||||
pci_bus_set_mem_base(pcihost->bus, 0x10000000);
|
||||
|
||||
d = pci_create_simple(b, PCI_DEVFN(0, 0), "Bonito");
|
||||
s = DO_UPCAST(PCIBonitoState, dev, d);
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
firmware implementation. The goal is to implement a 100% IEEE
|
||||
1275-1994 (referred to as Open Firmware) compliant firmware.
|
||||
The included image for PowerPC (for 32 and 64 bit PPC CPUs), Sparc32
|
||||
and Sparc64 are built from OpenBIOS SVN revision 795.
|
||||
and Sparc64 are built from OpenBIOS SVN revision 821.
|
||||
|
||||
- The PXE roms come from Rom-o-Matic gPXE 0.9.9 with BANNER_TIMEOUT=0
|
||||
|
||||
|
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -1271,7 +1271,7 @@ DEF("chardev", HAS_ARG, QEMU_OPTION_chardev,
|
|||
"-chardev serial,id=id,path=path[,mux=on|off]\n"
|
||||
#else
|
||||
"-chardev pty,id=id[,mux=on|off]\n"
|
||||
"-chardev stdio,id=id[,mux=on|off]\n"
|
||||
"-chardev stdio,id=id[,mux=on|off][,signal=on|off]\n"
|
||||
#endif
|
||||
#ifdef CONFIG_BRLAPI
|
||||
"-chardev braille,id=id[,mux=on|off]\n"
|
||||
|
@ -1452,10 +1452,14 @@ not take any options.
|
|||
|
||||
@option{pty} is not available on Windows hosts.
|
||||
|
||||
@item -chardev stdio ,id=@var{id}
|
||||
@item -chardev stdio ,id=@var{id} [,signal=on|off]
|
||||
Connect to standard input and standard output of the qemu process.
|
||||
@option{stdio} does not take any options. @option{stdio} is not available on
|
||||
Windows hosts.
|
||||
|
||||
@option{signal} controls if signals are enabled on the terminal, that includes
|
||||
exiting QEMU with the key sequence @key{Control-c}. This option is enabled by
|
||||
default, use @option{signal=off} to disable it.
|
||||
|
||||
@option{stdio} is not available on Windows hosts.
|
||||
|
||||
@item -chardev braille ,id=@var{id}
|
||||
|
||||
|
|
|
@ -246,6 +246,7 @@ DEF_HELPER_2(vrefp, void, avr, avr)
|
|||
DEF_HELPER_2(vrsqrtefp, void, avr, avr)
|
||||
DEF_HELPER_4(vmaddfp, void, avr, avr, avr, avr)
|
||||
DEF_HELPER_4(vnmsubfp, void, avr, avr, avr, avr)
|
||||
DEF_HELPER_2(vexptefp, void, avr, avr)
|
||||
DEF_HELPER_2(vlogefp, void, avr, avr)
|
||||
DEF_HELPER_2(vrfim, void, avr, avr)
|
||||
DEF_HELPER_2(vrfin, void, avr, avr)
|
||||
|
|
|
@ -2713,6 +2713,16 @@ void helper_vsel (ppc_avr_t *r, ppc_avr_t *a, ppc_avr_t *b, ppc_avr_t *c)
|
|||
r->u64[1] = (a->u64[1] & ~c->u64[1]) | (b->u64[1] & c->u64[1]);
|
||||
}
|
||||
|
||||
void helper_vexptefp (ppc_avr_t *r, ppc_avr_t *b)
|
||||
{
|
||||
int i;
|
||||
for (i = 0; i < ARRAY_SIZE(r->f); i++) {
|
||||
HANDLE_NAN1(r->f[i], b->f[i]) {
|
||||
r->f[i] = float32_exp2(b->f[i], &env->vec_status);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void helper_vlogefp (ppc_avr_t *r, ppc_avr_t *b)
|
||||
{
|
||||
int i;
|
||||
|
|
|
@ -6382,6 +6382,7 @@ GEN_VXFORM_NOA(vupkhpx, 7, 13);
|
|||
GEN_VXFORM_NOA(vupklpx, 7, 15);
|
||||
GEN_VXFORM_NOA(vrefp, 5, 4);
|
||||
GEN_VXFORM_NOA(vrsqrtefp, 5, 5);
|
||||
GEN_VXFORM_NOA(vexptefp, 5, 6);
|
||||
GEN_VXFORM_NOA(vlogefp, 5, 7);
|
||||
GEN_VXFORM_NOA(vrfim, 5, 8);
|
||||
GEN_VXFORM_NOA(vrfin, 5, 9);
|
||||
|
@ -8696,6 +8697,7 @@ GEN_VXFORM_NOA(vupkhpx, 7, 13),
|
|||
GEN_VXFORM_NOA(vupklpx, 7, 15),
|
||||
GEN_VXFORM_NOA(vrefp, 5, 4),
|
||||
GEN_VXFORM_NOA(vrsqrtefp, 5, 5),
|
||||
GEN_VXFORM_NOA(vexptefp, 5, 6),
|
||||
GEN_VXFORM_NOA(vlogefp, 5, 7),
|
||||
GEN_VXFORM_NOA(vrfim, 5, 8),
|
||||
GEN_VXFORM_NOA(vrfin, 5, 9),
|
||||
|
|
Loading…
Reference in New Issue