Browse Source

[xcc,sim] added fused multiply-add and its cousins

cs250
Andrew Waterman 16 years ago
parent
commit
3e18d4ccc0
  1. 56
      riscv/execute.h
  2. 3
      riscv/insns/madd_d.h
  3. 3
      riscv/insns/madd_s.h
  4. 3
      riscv/insns/msub_d.h
  5. 3
      riscv/insns/msub_s.h
  6. 3
      riscv/insns/nmadd_d.h
  7. 3
      riscv/insns/nmadd_s.h
  8. 3
      riscv/insns/nmsub_d.h
  9. 3
      riscv/insns/nmsub_s.h

56
riscv/execute.h

@ -277,6 +277,62 @@ switch((insn.bits >> 0x19) & 0x7f)
}
#include "insns/unimp.h"
}
case 0x4:
{
if((insn.bits & 0xfe007c00) == 0xd0004000)
{
#include "insns/madd_s.h"
break;
}
if((insn.bits & 0xfe007c00) == 0xd0004c00)
{
#include "insns/madd_d.h"
break;
}
#include "insns/unimp.h"
}
case 0x5:
{
if((insn.bits & 0xfe007c00) == 0xd0005000)
{
#include "insns/msub_s.h"
break;
}
if((insn.bits & 0xfe007c00) == 0xd0005c00)
{
#include "insns/msub_d.h"
break;
}
#include "insns/unimp.h"
}
case 0x6:
{
if((insn.bits & 0xfe007c00) == 0xd0006000)
{
#include "insns/nmadd_s.h"
break;
}
if((insn.bits & 0xfe007c00) == 0xd0006c00)
{
#include "insns/nmadd_d.h"
break;
}
#include "insns/unimp.h"
}
case 0x7:
{
if((insn.bits & 0xfe007c00) == 0xd0007c00)
{
#include "insns/nmsub_d.h"
break;
}
if((insn.bits & 0xfe007c00) == 0xd0007000)
{
#include "insns/nmsub_s.h"
break;
}
#include "insns/unimp.h"
}
default:
{
#include "insns/unimp.h"

3
riscv/insns/madd_d.h

@ -0,0 +1,3 @@
require_fp;
FRC = f64_mulAdd(FRA, FRB, FRD);
set_fp_exceptions;

3
riscv/insns/madd_s.h

@ -0,0 +1,3 @@
require_fp;
FRC = f32_mulAdd(FRA, FRB, FRD);
set_fp_exceptions;

3
riscv/insns/msub_d.h

@ -0,0 +1,3 @@
require_fp;
FRC = f64_mulAdd(FRA, FRB, FRD ^ (uint32_t)INT64_MIN);
set_fp_exceptions;

3
riscv/insns/msub_s.h

@ -0,0 +1,3 @@
require_fp;
FRC = f32_mulAdd(FRA, FRB, FRD ^ (uint32_t)INT32_MIN);
set_fp_exceptions;

3
riscv/insns/nmadd_d.h

@ -0,0 +1,3 @@
require_fp;
FRC = f64_mulAdd(FRA, FRB, FRD) ^ (uint64_t)INT64_MIN;
set_fp_exceptions;

3
riscv/insns/nmadd_s.h

@ -0,0 +1,3 @@
require_fp;
FRC = f32_mulAdd(FRA, FRB, FRD) ^ (uint32_t)INT32_MIN;
set_fp_exceptions;

3
riscv/insns/nmsub_d.h

@ -0,0 +1,3 @@
require_fp;
FRC = f64_mulAdd(FRA, FRB, FRD ^ (uint64_t)INT64_MIN) ^ (uint64_t)INT64_MIN;
set_fp_exceptions;

3
riscv/insns/nmsub_s.h

@ -0,0 +1,3 @@
require_fp;
FRC = f32_mulAdd(FRA, FRB, FRD ^ (uint32_t)INT32_MIN) ^ (uint32_t)INT32_MIN;
set_fp_exceptions;
Loading…
Cancel
Save