Commit 711d13d5 authored by Peter Maydell's avatar Peter Maydell
Browse files

Merge remote-tracking branch 'remotes/amarkovic/tags/mips-queue-feb-27-2019' into staging



MIPS queue for February 27th, 2019

# gpg: Signature made Wed 27 Feb 2019 13:27:36 GMT
# gpg:                using RSA key D4972A8967F75A65
# gpg: Good signature from "Aleksandar Markovic <amarkovic@wavecomp.com>" [unknown]
# gpg: WARNING: This key is not certified with a trusted signature!
# gpg:          There is no indication that the signature belongs to the owner.
# Primary key fingerprint: 8526 FBF1 5DA3 811F 4A01  DD75 D497 2A89 67F7 5A65

* remotes/amarkovic/tags/mips-queue-feb-27-2019:
  target/mips: Preparing for adding MMI instructions
  tests/tcg: target/mips: Add tests for MSA integer max/min instructions
  tests/tcg: target/mips: Add wrappers for MSA integer max/min instructions
  qemu-doc: Add section on MIPS' Boston board
  qemu-doc: Add section on MIPS' Fulong 2E board
  qemu-doc: Move section on MIPS' mipssim pseudo board
  disas: nanoMIPS: Fix a function misnomer
  tests/tcg: target/mips: Add tests for MSA integer compare instructions

Signed-off-by: default avatarPeter Maydell <peter.maydell@linaro.org>
parents 093a2af7 37b9aae2
Loading
Loading
Loading
Loading
+48 −48
Original line number Diff line number Diff line
@@ -1058,7 +1058,7 @@ uint64 NMD::extract_stripe_6(uint64 instruction)
}
uint64 NMD::extract_ac_13_12(uint64 instruction)
uint64 NMD::extract_ac_15_14(uint64 instruction)
{
    uint64 value = 0;
    value |= extract_bits(instruction, 14, 2);
@@ -6375,7 +6375,7 @@ std::string NMD::DPA_W_PH(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 ac_value = extract_ac_13_12(instruction);
    uint64 ac_value = extract_ac_15_14(instruction);
    std::string ac = AC(copy(ac_value));
    std::string rs = GPR(copy(rs_value));
@@ -6399,7 +6399,7 @@ std::string NMD::DPAQ_SA_L_W(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 ac_value = extract_ac_13_12(instruction);
    uint64 ac_value = extract_ac_15_14(instruction);
    std::string ac = AC(copy(ac_value));
    std::string rs = GPR(copy(rs_value));
@@ -6423,7 +6423,7 @@ std::string NMD::DPAQ_S_W_PH(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 ac_value = extract_ac_13_12(instruction);
    uint64 ac_value = extract_ac_15_14(instruction);
    std::string ac = AC(copy(ac_value));
    std::string rs = GPR(copy(rs_value));
@@ -6447,7 +6447,7 @@ std::string NMD::DPAQX_SA_W_PH(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 ac_value = extract_ac_13_12(instruction);
    uint64 ac_value = extract_ac_15_14(instruction);
    std::string ac = AC(copy(ac_value));
    std::string rs = GPR(copy(rs_value));
@@ -6471,7 +6471,7 @@ std::string NMD::DPAQX_S_W_PH(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 ac_value = extract_ac_13_12(instruction);
    uint64 ac_value = extract_ac_15_14(instruction);
    std::string ac = AC(copy(ac_value));
    std::string rs = GPR(copy(rs_value));
@@ -6495,7 +6495,7 @@ std::string NMD::DPAU_H_QBL(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 ac_value = extract_ac_13_12(instruction);
    uint64 ac_value = extract_ac_15_14(instruction);
    std::string ac = AC(copy(ac_value));
    std::string rs = GPR(copy(rs_value));
@@ -6519,7 +6519,7 @@ std::string NMD::DPAU_H_QBR(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 ac_value = extract_ac_13_12(instruction);
    uint64 ac_value = extract_ac_15_14(instruction);
    std::string ac = AC(copy(ac_value));
    std::string rs = GPR(copy(rs_value));
@@ -6543,7 +6543,7 @@ std::string NMD::DPAX_W_PH(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 ac_value = extract_ac_13_12(instruction);
    uint64 ac_value = extract_ac_15_14(instruction);
    std::string ac = AC(copy(ac_value));
    std::string rs = GPR(copy(rs_value));
@@ -6567,7 +6567,7 @@ std::string NMD::DPS_W_PH(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 ac_value = extract_ac_13_12(instruction);
    uint64 ac_value = extract_ac_15_14(instruction);
    std::string ac = AC(copy(ac_value));
    std::string rs = GPR(copy(rs_value));
@@ -6591,7 +6591,7 @@ std::string NMD::DPSQ_SA_L_W(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 ac_value = extract_ac_13_12(instruction);
    uint64 ac_value = extract_ac_15_14(instruction);
    std::string ac = AC(copy(ac_value));
    std::string rs = GPR(copy(rs_value));
@@ -6615,7 +6615,7 @@ std::string NMD::DPSQ_S_W_PH(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 ac_value = extract_ac_13_12(instruction);
    uint64 ac_value = extract_ac_15_14(instruction);
    std::string ac = AC(copy(ac_value));
    std::string rs = GPR(copy(rs_value));
@@ -6639,7 +6639,7 @@ std::string NMD::DPSQX_SA_W_PH(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 ac_value = extract_ac_13_12(instruction);
    uint64 ac_value = extract_ac_15_14(instruction);
    std::string ac = AC(copy(ac_value));
    std::string rs = GPR(copy(rs_value));
@@ -6663,7 +6663,7 @@ std::string NMD::DPSQX_S_W_PH(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 ac_value = extract_ac_13_12(instruction);
    uint64 ac_value = extract_ac_15_14(instruction);
    std::string ac = AC(copy(ac_value));
    std::string rs = GPR(copy(rs_value));
@@ -6687,7 +6687,7 @@ std::string NMD::DPSU_H_QBL(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 ac_value = extract_ac_13_12(instruction);
    uint64 ac_value = extract_ac_15_14(instruction);
    std::string ac = AC(copy(ac_value));
    std::string rs = GPR(copy(rs_value));
@@ -6711,7 +6711,7 @@ std::string NMD::DPSU_H_QBR(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 ac_value = extract_ac_13_12(instruction);
    uint64 ac_value = extract_ac_15_14(instruction);
    std::string ac = AC(copy(ac_value));
    std::string rs = GPR(copy(rs_value));
@@ -6735,7 +6735,7 @@ std::string NMD::DPSX_W_PH(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 ac_value = extract_ac_13_12(instruction);
    uint64 ac_value = extract_ac_15_14(instruction);
    std::string ac = AC(copy(ac_value));
    std::string rs = GPR(copy(rs_value));
@@ -7373,7 +7373,7 @@ std::string NMD::EXTPDP(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 size_value = extract_size_20_19_18_17_16(instruction);
    uint64 ac_value = extract_ac_13_12(instruction);
    uint64 ac_value = extract_ac_15_14(instruction);
    std::string rt = GPR(copy(rt_value));
    std::string ac = AC(copy(ac_value));
@@ -7397,7 +7397,7 @@ std::string NMD::EXTPDPV(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 ac_value = extract_ac_13_12(instruction);
    uint64 ac_value = extract_ac_15_14(instruction);
    std::string rt = GPR(copy(rt_value));
    std::string ac = AC(copy(ac_value));
@@ -7421,7 +7421,7 @@ std::string NMD::EXTP(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 size_value = extract_size_20_19_18_17_16(instruction);
    uint64 ac_value = extract_ac_13_12(instruction);
    uint64 ac_value = extract_ac_15_14(instruction);
    std::string rt = GPR(copy(rt_value));
    std::string ac = AC(copy(ac_value));
@@ -7445,7 +7445,7 @@ std::string NMD::EXTPV(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 ac_value = extract_ac_13_12(instruction);
    uint64 ac_value = extract_ac_15_14(instruction);
    std::string rt = GPR(copy(rt_value));
    std::string ac = AC(copy(ac_value));
@@ -7469,7 +7469,7 @@ std::string NMD::EXTR_RS_W(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 shift_value = extract_shift_20_19_18_17_16(instruction);
    uint64 ac_value = extract_ac_13_12(instruction);
    uint64 ac_value = extract_ac_15_14(instruction);
    std::string rt = GPR(copy(rt_value));
    std::string ac = AC(copy(ac_value));
@@ -7493,7 +7493,7 @@ std::string NMD::EXTR_R_W(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 shift_value = extract_shift_20_19_18_17_16(instruction);
    uint64 ac_value = extract_ac_13_12(instruction);
    uint64 ac_value = extract_ac_15_14(instruction);
    std::string rt = GPR(copy(rt_value));
    std::string ac = AC(copy(ac_value));
@@ -7517,7 +7517,7 @@ std::string NMD::EXTR_S_H(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 shift_value = extract_shift_20_19_18_17_16(instruction);
    uint64 ac_value = extract_ac_13_12(instruction);
    uint64 ac_value = extract_ac_15_14(instruction);
    std::string rt = GPR(copy(rt_value));
    std::string ac = AC(copy(ac_value));
@@ -7541,7 +7541,7 @@ std::string NMD::EXTR_W(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 shift_value = extract_shift_20_19_18_17_16(instruction);
    uint64 ac_value = extract_ac_13_12(instruction);
    uint64 ac_value = extract_ac_15_14(instruction);
    std::string rt = GPR(copy(rt_value));
    std::string ac = AC(copy(ac_value));
@@ -7565,7 +7565,7 @@ std::string NMD::EXTRV_RS_W(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 ac_value = extract_ac_13_12(instruction);
    uint64 ac_value = extract_ac_15_14(instruction);
    std::string rt = GPR(copy(rt_value));
    std::string ac = AC(copy(ac_value));
@@ -7589,7 +7589,7 @@ std::string NMD::EXTRV_R_W(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 ac_value = extract_ac_13_12(instruction);
    uint64 ac_value = extract_ac_15_14(instruction);
    std::string rt = GPR(copy(rt_value));
    std::string ac = AC(copy(ac_value));
@@ -7613,7 +7613,7 @@ std::string NMD::EXTRV_S_H(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 ac_value = extract_ac_13_12(instruction);
    uint64 ac_value = extract_ac_15_14(instruction);
    std::string rt = GPR(copy(rt_value));
    std::string ac = AC(copy(ac_value));
@@ -7637,7 +7637,7 @@ std::string NMD::EXTRV_W(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 ac_value = extract_ac_13_12(instruction);
    uint64 ac_value = extract_ac_15_14(instruction);
    std::string rt = GPR(copy(rt_value));
    std::string ac = AC(copy(ac_value));
@@ -9719,7 +9719,7 @@ std::string NMD::MADD_DSP_(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 ac_value = extract_ac_13_12(instruction);
    uint64 ac_value = extract_ac_15_14(instruction);
    std::string ac = AC(copy(ac_value));
    std::string rs = GPR(copy(rs_value));
@@ -9792,7 +9792,7 @@ std::string NMD::MADDU_DSP_(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 ac_value = extract_ac_13_12(instruction);
    uint64 ac_value = extract_ac_15_14(instruction);
    std::string ac = AC(copy(ac_value));
    std::string rs = GPR(copy(rs_value));
@@ -9817,7 +9817,7 @@ std::string NMD::MAQ_S_W_PHL(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 ac_value = extract_ac_13_12(instruction);
    uint64 ac_value = extract_ac_15_14(instruction);
    std::string ac = AC(copy(ac_value));
    std::string rs = GPR(copy(rs_value));
@@ -9842,7 +9842,7 @@ std::string NMD::MAQ_S_W_PHR(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 ac_value = extract_ac_13_12(instruction);
    uint64 ac_value = extract_ac_15_14(instruction);
    std::string ac = AC(copy(ac_value));
    std::string rs = GPR(copy(rs_value));
@@ -9867,7 +9867,7 @@ std::string NMD::MAQ_SA_W_PHL(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 ac_value = extract_ac_13_12(instruction);
    uint64 ac_value = extract_ac_15_14(instruction);
    std::string ac = AC(copy(ac_value));
    std::string rs = GPR(copy(rs_value));
@@ -9892,7 +9892,7 @@ std::string NMD::MAQ_SA_W_PHR(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 ac_value = extract_ac_13_12(instruction);
    uint64 ac_value = extract_ac_15_14(instruction);
    std::string ac = AC(copy(ac_value));
    std::string rs = GPR(copy(rs_value));
@@ -10195,7 +10195,7 @@ std::string NMD::MFHGC0(uint64 instruction)
std::string NMD::MFHI_DSP_(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 ac_value = extract_ac_13_12(instruction);
    uint64 ac_value = extract_ac_15_14(instruction);
    std::string rt = GPR(copy(rt_value));
    std::string ac = AC(copy(ac_value));
@@ -10243,7 +10243,7 @@ std::string NMD::MFHTR(uint64 instruction)
std::string NMD::MFLO_DSP_(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 ac_value = extract_ac_13_12(instruction);
    uint64 ac_value = extract_ac_15_14(instruction);
    std::string rt = GPR(copy(rt_value));
    std::string ac = AC(copy(ac_value));
@@ -10652,7 +10652,7 @@ std::string NMD::MSUB_DSP_(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 ac_value = extract_ac_13_12(instruction);
    uint64 ac_value = extract_ac_15_14(instruction);
    std::string ac = AC(copy(ac_value));
    std::string rs = GPR(copy(rs_value));
@@ -10724,7 +10724,7 @@ std::string NMD::MSUBU_DSP_(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 ac_value = extract_ac_13_12(instruction);
    uint64 ac_value = extract_ac_15_14(instruction);
    std::string ac = AC(copy(ac_value));
    std::string rs = GPR(copy(rs_value));
@@ -10931,7 +10931,7 @@ std::string NMD::MTHGC0(uint64 instruction)
std::string NMD::MTHI_DSP_(uint64 instruction)
{
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 ac_value = extract_ac_13_12(instruction);
    uint64 ac_value = extract_ac_15_14(instruction);
    std::string rs = GPR(copy(rs_value));
    std::string ac = AC(copy(ac_value));
@@ -10953,7 +10953,7 @@ std::string NMD::MTHI_DSP_(uint64 instruction)
std::string NMD::MTHLIP(uint64 instruction)
{
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 ac_value = extract_ac_13_12(instruction);
    uint64 ac_value = extract_ac_15_14(instruction);
    std::string rs = GPR(copy(rs_value));
    std::string ac = AC(copy(ac_value));
@@ -11001,7 +11001,7 @@ std::string NMD::MTHTR(uint64 instruction)
std::string NMD::MTLO_DSP_(uint64 instruction)
{
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 ac_value = extract_ac_13_12(instruction);
    uint64 ac_value = extract_ac_15_14(instruction);
    std::string rs = GPR(copy(rs_value));
    std::string ac = AC(copy(ac_value));
@@ -11432,7 +11432,7 @@ std::string NMD::MULSA_W_PH(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 ac_value = extract_ac_13_12(instruction);
    uint64 ac_value = extract_ac_15_14(instruction);
    std::string ac = AC(copy(ac_value));
    std::string rs = GPR(copy(rs_value));
@@ -11456,7 +11456,7 @@ std::string NMD::MULSAQ_S_W_PH(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 ac_value = extract_ac_13_12(instruction);
    uint64 ac_value = extract_ac_15_14(instruction);
    std::string ac = AC(copy(ac_value));
    std::string rs = GPR(copy(rs_value));
@@ -11480,7 +11480,7 @@ std::string NMD::MULT_DSP_(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 ac_value = extract_ac_13_12(instruction);
    uint64 ac_value = extract_ac_15_14(instruction);
    std::string ac = AC(copy(ac_value));
    std::string rs = GPR(copy(rs_value));
@@ -11504,7 +11504,7 @@ std::string NMD::MULTU_DSP_(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 ac_value = extract_ac_13_12(instruction);
    uint64 ac_value = extract_ac_15_14(instruction);
    std::string ac = AC(copy(ac_value));
    std::string rs = GPR(copy(rs_value));
@@ -13932,7 +13932,7 @@ std::string NMD::SHE(uint64 instruction)
std::string NMD::SHILO(uint64 instruction)
{
    int64 shift_value = extract_shift__se5_21_20_19_18_17_16(instruction);
    uint64 ac_value = extract_ac_13_12(instruction);
    uint64 ac_value = extract_ac_15_14(instruction);
    std::string shift = IMMEDIATE(copy(shift_value));
    std::string ac = AC(copy(ac_value));
@@ -13954,7 +13954,7 @@ std::string NMD::SHILO(uint64 instruction)
std::string NMD::SHILOV(uint64 instruction)
{
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 ac_value = extract_ac_13_12(instruction);
    uint64 ac_value = extract_ac_15_14(instruction);
    std::string rs = GPR(copy(rs_value));
    std::string ac = AC(copy(ac_value));
+1 −1
Original line number Diff line number Diff line
@@ -159,7 +159,7 @@ private:
    int64 extract_s__se31_0_11_to_2_20_to_12_s12(uint64 instruction);
    int64 extract_shift__se5_21_20_19_18_17_16(uint64 instruction);

    uint64 extract_ac_13_12(uint64 instruction);
    uint64 extract_ac_15_14(uint64 instruction);
    uint64 extract_bit_16_15_14_13_12_11(uint64 instruction);
    uint64 extract_bit_23_22_21(uint64 instruction);
    uint64 extract_c0s_20_19_18_17_16(uint64 instruction);
+34 −12
Original line number Diff line number Diff line
@@ -2049,6 +2049,15 @@ Malta FPGA serial device
Cirrus (default) or any other PCI VGA graphics card
@end itemize

The Boston board emulation supports the following devices:

@itemize @minus
@item
Xilinx FPGA, which includes a PCIe root port and an UART
@item
Intel EG20T PCH connects the I/O peripherals, but only the SATA bus is emulated
@end itemize

The ACER Pica emulation supports:

@itemize @minus
@@ -2062,32 +2071,45 @@ PC Keyboard
IDE controller
@end itemize

The mipssim pseudo board emulation provides an environment similar
to what the proprietary MIPS emulator uses for running Linux.
It supports:
The MIPS Magnum R4000 emulation supports:

@itemize @minus
@item
A range of MIPS CPUs, default is the 24Kf
MIPS R4000 CPU
@item
PC style serial port
PC-style IRQ controller
@item
MIPSnet network emulation
PC Keyboard
@item
SCSI controller
@item
G364 framebuffer
@end itemize

The MIPS Magnum R4000 emulation supports:
The Fulong 2E emulation supports:

@itemize @minus
@item
MIPS R4000 CPU
Loongson 2E CPU
@item
PC-style IRQ controller
Bonito64 system controller as North Bridge
@item
PC Keyboard
VT82C686 chipset as South Bridge
@item
SCSI controller
RTL8139D as a network card chipset
@end itemize

The mipssim pseudo board emulation provides an environment similar
to what the proprietary MIPS emulator uses for running Linux.
It supports:

@itemize @minus
@item
G364 framebuffer
A range of MIPS CPUs, default is the 24Kf
@item
PC style serial port
@item
MIPSnet network emulation
@end itemize

@node nanoMIPS System emulator
+41 −2
Original line number Diff line number Diff line
@@ -4362,6 +4362,7 @@ static void gen_shift(DisasContext *ctx, uint32_t opc,
    tcg_temp_free(t1);
}
#if defined(TARGET_MIPS64)
/* Copy GPR to and from TX79 HI1/LO1 register. */
static void gen_HILO1_tx79(DisasContext *ctx, uint32_t opc, int reg)
{
@@ -4397,6 +4398,7 @@ static void gen_HILO1_tx79(DisasContext *ctx, uint32_t opc, int reg)
        break;
    }
}
#endif
/* Arithmetic on HI/LO registers */
static void gen_HILO(DisasContext *ctx, uint32_t opc, int acc, int reg)
@@ -4746,6 +4748,7 @@ static void gen_r6_muldiv(DisasContext *ctx, int opc, int rd, int rs, int rt)
    tcg_temp_free(t1);
}
#if defined(TARGET_MIPS64)
static void gen_div1_tx79(DisasContext *ctx, uint32_t opc, int rs, int rt)
{
    TCGv t0, t1;
@@ -4802,6 +4805,7 @@ static void gen_div1_tx79(DisasContext *ctx, uint32_t opc, int rs, int rt)
    tcg_temp_free(t0);
    tcg_temp_free(t1);
}
#endif
static void gen_muldiv(DisasContext *ctx, uint32_t opc,
                       int acc, int rs, int rt)
@@ -24324,6 +24328,29 @@ static void decode_opc_special(CPUMIPSState *env, DisasContext *ctx)
}
#if defined(TARGET_MIPS64)
/*
 *
 *           MMI (MultiMedia Interface) ASE instructions
 *           ===========================================
 */
/*
 *          MMI instructions category: data communication
 *          ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 *
 *   PCPYH    PEXCH    PEXTLB   PINTH    PPACB    PEXT5    PREVH
 *   PCPYLD   PEXCW    PEXTLH   PINTEH   PPACH    PPAC5    PROT3W
 *   PCPYUD   PEXEH    PEXTLW            PPACW
 *            PEXEW    PEXTUB
 *                     PEXTUH
 *                     PEXTUW
 */
#endif
#if !defined(TARGET_MIPS64)
/* MXU accumulate add/subtract 1-bit pattern 'aptn1' */
@@ -27247,6 +27274,9 @@ static void decode_opc_special3_legacy(CPUMIPSState *env, DisasContext *ctx)
    }
}
#if defined(TARGET_MIPS64)
static void decode_mmi0(CPUMIPSState *env, DisasContext *ctx)
{
    uint32_t opc = MASK_MMI0(ctx->opcode);
@@ -27491,6 +27521,8 @@ static void decode_mmi_sq(CPUMIPSState *env, DisasContext *ctx)
    gen_mmi_sq(ctx, base, rt, offset);
}
#endif
static void decode_opc_special3(CPUMIPSState *env, DisasContext *ctx)
{
    int rs, rt, rd, sa;
@@ -28796,10 +28828,11 @@ static void decode_opc(CPUMIPSState *env, DisasContext *ctx)
        decode_opc_special(env, ctx);
        break;
    case OPC_SPECIAL2:
#if defined(TARGET_MIPS64)
        if ((ctx->insn_flags & INSN_R5900) && (ctx->insn_flags & ASE_MMI)) {
            decode_mmi(env, ctx);
#if !defined(TARGET_MIPS64)
        } else if (ctx->insn_flags & ASE_MXU) {
#else
        if (ctx->insn_flags & ASE_MXU) {
            decode_opc_mxu(env, ctx);
#endif
        } else {
@@ -28807,11 +28840,15 @@ static void decode_opc(CPUMIPSState *env, DisasContext *ctx)
        }
        break;
    case OPC_SPECIAL3:
#if defined(TARGET_MIPS64)
        if (ctx->insn_flags & INSN_R5900) {
            decode_mmi_sq(env, ctx);    /* MMI_OPC_SQ */
        } else {
            decode_opc_special3(env, ctx);
        }
#else
        decode_opc_special3(env, ctx);
#endif
        break;
    case OPC_REGIMM:
        op1 = MASK_REGIMM(ctx->opcode);
@@ -29483,7 +29520,9 @@ static void decode_opc(CPUMIPSState *env, DisasContext *ctx)
        break;
    case OPC_MSA: /* OPC_MDMX */
        if (ctx->insn_flags & INSN_R5900) {
#if defined(TARGET_MIPS64)
            gen_mmi_lq(env, ctx);    /* MMI_OPC_LQ */
#endif
        } else {
            /* MDMX: Not implemented. */
            gen_msa(env, ctx);
+30 −0
Original line number Diff line number Diff line
@@ -122,5 +122,35 @@ DO_MSA__WD__WS_WT(CLT_U_H, clt_u.h)
DO_MSA__WD__WS_WT(CLT_U_W, clt_u.w)
DO_MSA__WD__WS_WT(CLT_U_D, clt_u.d)

DO_MSA__WD__WS_WT(MAX_A_B, max_a.b)
DO_MSA__WD__WS_WT(MAX_A_H, max_a.h)
DO_MSA__WD__WS_WT(MAX_A_W, max_a.w)
DO_MSA__WD__WS_WT(MAX_A_D, max_a.d)

DO_MSA__WD__WS_WT(MIN_A_B, min_a.b)
DO_MSA__WD__WS_WT(MIN_A_H, min_a.h)
DO_MSA__WD__WS_WT(MIN_A_W, min_a.w)
DO_MSA__WD__WS_WT(MIN_A_D, min_a.d)

DO_MSA__WD__WS_WT(MAX_S_B, max_s.b)
DO_MSA__WD__WS_WT(MAX_S_H, max_s.h)
DO_MSA__WD__WS_WT(MAX_S_W, max_s.w)
DO_MSA__WD__WS_WT(MAX_S_D, max_s.d)

DO_MSA__WD__WS_WT(MIN_S_B, min_s.b)
DO_MSA__WD__WS_WT(MIN_S_H, min_s.h)
DO_MSA__WD__WS_WT(MIN_S_W, min_s.w)
DO_MSA__WD__WS_WT(MIN_S_D, min_s.d)

DO_MSA__WD__WS_WT(MAX_U_B, max_u.b)
DO_MSA__WD__WS_WT(MAX_U_H, max_u.h)
DO_MSA__WD__WS_WT(MAX_U_W, max_u.w)
DO_MSA__WD__WS_WT(MAX_U_D, max_u.d)

DO_MSA__WD__WS_WT(MIN_U_B, min_u.b)
DO_MSA__WD__WS_WT(MIN_U_H, min_u.h)
DO_MSA__WD__WS_WT(MIN_U_W, min_u.w)
DO_MSA__WD__WS_WT(MIN_U_D, min_u.d)


#endif
Loading