rv64i.h revision 11730:08ab68477ea0
12SN/A/*
21762SN/A * Copyright (c) 2016 The University of Virginia
32SN/A * All rights reserved.
42SN/A *
52SN/A * Redistribution and use in source and binary forms, with or without
62SN/A * modification, are permitted provided that the following conditions are
72SN/A * met: redistributions of source code must retain the above copyright
82SN/A * notice, this list of conditions and the following disclaimer;
92SN/A * redistributions in binary form must reproduce the above copyright
102SN/A * notice, this list of conditions and the following disclaimer in the
112SN/A * documentation and/or other materials provided with the distribution;
122SN/A * neither the name of the copyright holders nor the names of its
132SN/A * contributors may be used to endorse or promote products derived from
142SN/A * this software without specific prior written permission.
152SN/A *
162SN/A * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
172SN/A * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
182SN/A * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
192SN/A * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
202SN/A * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
212SN/A * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
222SN/A * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
232SN/A * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
242SN/A * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
252SN/A * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
262SN/A * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
272665Ssaidi@eecs.umich.edu *
282665Ssaidi@eecs.umich.edu * Authors: Alec Roelke
292665Ssaidi@eecs.umich.edu */
302665Ssaidi@eecs.umich.edu
312SN/A#pragma once
322SN/A
332SN/A#include <cstdint>
342SN/A#include <iostream>
352SN/A
362984Sgblack@eecs.umich.edu#include "insttest.h"
372171SN/A
382984Sgblack@eecs.umich.edunamespace I
39146SN/A{
40146SN/A
41146SN/Ainline uint64_t
421858SN/Alui(const uint32_t imm)
432680Sktlim@umich.edu{
444762Snate@binkert.org    int64_t rd = -1;
454762Snate@binkert.org    asm volatile("lui %0,%1" : "=r" (rd) : "i" (imm));
462SN/A    return rd;
472SN/A}
481147SN/A
492SN/Ainline bool
504088Sbinkertn@umich.eduauipc(const uint64_t imm)
513838Shsul@eecs.umich.edu{
523838Shsul@eecs.umich.edu    int64_t rd = -1;
533838Shsul@eecs.umich.edu    asm volatile("auipc %0,%1" : "=r" (rd) : "i" (imm));
543838Shsul@eecs.umich.edu    std::cout << "auipc: 0x" << std::hex << std::uppercase << rd <<
55860SN/A        std::nouppercase << std::dec << std::endl;
563838Shsul@eecs.umich.edu    return rd >= imm;
573838Shsul@eecs.umich.edu}
58860SN/A
59860SN/Ainline bool
601147SN/Ajal()
611147SN/A{
623838Shsul@eecs.umich.edu    asm volatile goto("jal zero,%l[jallabel]" : : : : jallabel);
633838Shsul@eecs.umich.edu    return false;
643838Shsul@eecs.umich.edu  jallabel:
655004Sgblack@eecs.umich.edu    return true;
665004Sgblack@eecs.umich.edu}
674957Sacolyte@umich.edu
683838Shsul@eecs.umich.eduinline bool
692SN/Ajalr()
703838Shsul@eecs.umich.edu{
713838Shsul@eecs.umich.edu    int a = 0;
723838Shsul@eecs.umich.edu    asm volatile("auipc %0,0;"
733838Shsul@eecs.umich.edu                 "jalr t0,%0,12;"
743838Shsul@eecs.umich.edu                 "addi %0,zero,0;"
752SN/A                 "sub %0,t0,%0;"
763838Shsul@eecs.umich.edu                 : "+r" (a)
775004Sgblack@eecs.umich.edu                 :
784967Sacolyte@umich.edu                 : "t0");
793838Shsul@eecs.umich.edu    return a == 8;
803838Shsul@eecs.umich.edu}
815004Sgblack@eecs.umich.edu
822SN/Ainline bool
835004Sgblack@eecs.umich.edubeq(int64_t a, int64_t b)
845004Sgblack@eecs.umich.edu{
855004Sgblack@eecs.umich.edu    asm volatile goto("beq %0,%1,%l[beqlabel]"
865004Sgblack@eecs.umich.edu            :
875004Sgblack@eecs.umich.edu            : "r" (a), "r" (b)
885004Sgblack@eecs.umich.edu            :
895004Sgblack@eecs.umich.edu            : beqlabel);
905004Sgblack@eecs.umich.edu    return false;
915004Sgblack@eecs.umich.edu  beqlabel:
925004Sgblack@eecs.umich.edu    return true;
935004Sgblack@eecs.umich.edu}
944962Sacolyte@umich.edu
954962Sacolyte@umich.eduinline bool
964962Sacolyte@umich.edubne(int64_t a, int64_t b)
974967Sacolyte@umich.edu{
984957Sacolyte@umich.edu    asm volatile goto("bne %0,%1,%l[bnelabel]"
994957Sacolyte@umich.edu            :
1004957Sacolyte@umich.edu            : "r" (a), "r" (b)
1014957Sacolyte@umich.edu            :
1025004Sgblack@eecs.umich.edu            : bnelabel);
1035004Sgblack@eecs.umich.edu    return false;
1045004Sgblack@eecs.umich.edu  bnelabel:
1055004Sgblack@eecs.umich.edu    return true;
1064957Sacolyte@umich.edu}
1074957Sacolyte@umich.edu
1084957Sacolyte@umich.eduinline bool
1094957Sacolyte@umich.edublt(int64_t a, int64_t b)
1101413SN/A{
1111413SN/A    asm volatile goto("blt %0,%1,%l[bltlabel]"
1122SN/A            :
1132SN/A            : "r" (a), "r" (b)
1143838Shsul@eecs.umich.edu            :
1153838Shsul@eecs.umich.edu            : bltlabel);
1163838Shsul@eecs.umich.edu    return false;
1173838Shsul@eecs.umich.edu  bltlabel:
1182SN/A    return true;
1192SN/A}
1203838Shsul@eecs.umich.edu
1213838Shsul@eecs.umich.eduinline bool
1223838Shsul@eecs.umich.edubge(int64_t a, int64_t b)
1233838Shsul@eecs.umich.edu{
1243838Shsul@eecs.umich.edu    asm volatile goto("bge %0,%1,%l[bgelabel]"
1253838Shsul@eecs.umich.edu            :
1263838Shsul@eecs.umich.edu            : "r" (a), "r" (b)
1273838Shsul@eecs.umich.edu            :
1283838Shsul@eecs.umich.edu            : bgelabel);
1293838Shsul@eecs.umich.edu    return false;
1303838Shsul@eecs.umich.edu  bgelabel:
1313838Shsul@eecs.umich.edu    return true;
1323838Shsul@eecs.umich.edu}
1333838Shsul@eecs.umich.edu
1343838Shsul@eecs.umich.eduinline bool
1353838Shsul@eecs.umich.edubltu(uint64_t a, uint64_t b)
1364088Sbinkertn@umich.edu{
1373838Shsul@eecs.umich.edu    asm volatile goto("bltu %0,%1,%l[bltulabel]"
1384088Sbinkertn@umich.edu            :
1393838Shsul@eecs.umich.edu            : "r" (a), "r" (b)
1404088Sbinkertn@umich.edu            :
1413838Shsul@eecs.umich.edu            : bltulabel);
1423838Shsul@eecs.umich.edu    return false;
1433838Shsul@eecs.umich.edu  bltulabel:
1443838Shsul@eecs.umich.edu    return true;
1453838Shsul@eecs.umich.edu}
1463838Shsul@eecs.umich.edu
1473838Shsul@eecs.umich.eduinline bool
1483838Shsul@eecs.umich.edubgeu(uint64_t a, uint64_t b)
1493838Shsul@eecs.umich.edu{
1503838Shsul@eecs.umich.edu    asm volatile goto("bgeu %0,%1,%l[bgeulabel]"
1513838Shsul@eecs.umich.edu            :
152924SN/A            : "r" (a), "r" (b)
1532SN/A            :
1543838Shsul@eecs.umich.edu            : bgeulabel);
1553838Shsul@eecs.umich.edu    return false;
1562SN/A  bgeulabel:
1572SN/A    return true;
1583838Shsul@eecs.umich.edu}
1593838Shsul@eecs.umich.edu
1605004Sgblack@eecs.umich.edutemplate<typename M, typename R> inline R
1613838Shsul@eecs.umich.eduload(const M& b)
1624957Sacolyte@umich.edu{
1633838Shsul@eecs.umich.edu    R a = 0;
1643838Shsul@eecs.umich.edu    switch(sizeof(M))
1653838Shsul@eecs.umich.edu    {
1663838Shsul@eecs.umich.edu      case 1:
1673838Shsul@eecs.umich.edu        if (std::is_signed<M>::value) {
1683838Shsul@eecs.umich.edu            asm volatile("lb %0,%1" : "=r" (a) : "m" (b));
1693838Shsul@eecs.umich.edu        } else {
1703838Shsul@eecs.umich.edu            asm volatile("lbu %0,%1" : "=r" (a) : "m" (b));
1713838Shsul@eecs.umich.edu        }
1723838Shsul@eecs.umich.edu        break;
1733838Shsul@eecs.umich.edu      case 2:
1743838Shsul@eecs.umich.edu        if (std::is_signed<M>::value) {
1753838Shsul@eecs.umich.edu            asm volatile("lh %0,%1" : "=r" (a) : "m" (b));
1763838Shsul@eecs.umich.edu        } else {
1773838Shsul@eecs.umich.edu            asm volatile("lhu %0,%1" : "=r" (a) : "m" (b));
1783838Shsul@eecs.umich.edu        }
1793838Shsul@eecs.umich.edu        break;
1803838Shsul@eecs.umich.edu      case 4:
1813838Shsul@eecs.umich.edu        if (std::is_signed<M>::value) {
1823838Shsul@eecs.umich.edu            asm volatile("lw %0,%1" : "=r" (a) : "m" (b));
1833838Shsul@eecs.umich.edu        } else {
1845004Sgblack@eecs.umich.edu            asm volatile("lwu %0,%1" : "=r" (a) : "m" (b));
1853838Shsul@eecs.umich.edu        }
1865004Sgblack@eecs.umich.edu        break;
1873838Shsul@eecs.umich.edu      case 8:
1883838Shsul@eecs.umich.edu        asm volatile("ld %0,%1" : "=r" (a) : "m" (b));
1893838Shsul@eecs.umich.edu        break;
1903838Shsul@eecs.umich.edu    }
1913838Shsul@eecs.umich.edu    return a;
1923838Shsul@eecs.umich.edu}
1933838Shsul@eecs.umich.edu
1943838Shsul@eecs.umich.edutemplate<typename M> inline M
1953838Shsul@eecs.umich.edustore(const M& rs2)
1963838Shsul@eecs.umich.edu{
1973838Shsul@eecs.umich.edu    M mem = 0;
1985004Sgblack@eecs.umich.edu    switch (sizeof(M))
1994957Sacolyte@umich.edu    {
2003838Shsul@eecs.umich.edu      case 1:
2013838Shsul@eecs.umich.edu        asm volatile("sb %1,%0" : "=m" (mem) : "r" (rs2));
2023838Shsul@eecs.umich.edu        break;
2033838Shsul@eecs.umich.edu      case 2:
2043838Shsul@eecs.umich.edu        asm volatile("sh %1,%0" : "=m" (mem) : "r" (rs2));
2053838Shsul@eecs.umich.edu        break;
2063838Shsul@eecs.umich.edu      case 4:
2074957Sacolyte@umich.edu        asm volatile("sw %1,%0" : "=m" (mem) : "r" (rs2));
2083838Shsul@eecs.umich.edu        break;
2093838Shsul@eecs.umich.edu      case 8:
2103838Shsul@eecs.umich.edu        asm volatile("sd %1,%0" : "=m" (mem) : "r" (rs2));
2113838Shsul@eecs.umich.edu        break;
2125004Sgblack@eecs.umich.edu    }
2135004Sgblack@eecs.umich.edu    return mem;
2143838Shsul@eecs.umich.edu}
2153838Shsul@eecs.umich.edu
2163838Shsul@eecs.umich.eduinline int64_t
2173838Shsul@eecs.umich.eduaddi(int64_t rs1, const int16_t imm)
2183838Shsul@eecs.umich.edu{
2193838Shsul@eecs.umich.edu    int64_t rd = 0;
2205004Sgblack@eecs.umich.edu    IOP("addi", rd, rs1, imm);
2215004Sgblack@eecs.umich.edu    return rd;
2225004Sgblack@eecs.umich.edu}
2233838Shsul@eecs.umich.edu
2243453Sgblack@eecs.umich.eduinline bool
2253453Sgblack@eecs.umich.eduslti(int64_t rs1, const int16_t imm)
2263838Shsul@eecs.umich.edu{
2272SN/A    bool rd = false;
2283838Shsul@eecs.umich.edu    IOP("slti", rd, rs1, imm);
2293838Shsul@eecs.umich.edu    return rd;
2303838Shsul@eecs.umich.edu}
2314957Sacolyte@umich.edu
2323838Shsul@eecs.umich.eduinline bool
2332SN/Asltiu(uint64_t rs1, const uint16_t imm)
2343838Shsul@eecs.umich.edu{
2353838Shsul@eecs.umich.edu    bool rd = false;
2363838Shsul@eecs.umich.edu    IOP("sltiu", rd, rs1, imm);
2372SN/A    return rd;
2384428Ssaidi@eecs.umich.edu}
2393838Shsul@eecs.umich.edu
2405004Sgblack@eecs.umich.eduinline uint64_t
2415004Sgblack@eecs.umich.eduxori(uint64_t rs1, const uint16_t imm)
2423453Sgblack@eecs.umich.edu{
2435004Sgblack@eecs.umich.edu    uint64_t rd = 0;
2443838Shsul@eecs.umich.edu    IOP("xori", rd, rs1, imm);
2455004Sgblack@eecs.umich.edu    return rd;
2463453Sgblack@eecs.umich.edu}
2473838Shsul@eecs.umich.edu
2485004Sgblack@eecs.umich.eduinline uint64_t
2493838Shsul@eecs.umich.eduori(uint64_t rs1, const uint16_t imm)
2504428Ssaidi@eecs.umich.edu{
2514428Ssaidi@eecs.umich.edu    uint64_t rd = 0;
2524428Ssaidi@eecs.umich.edu    IOP("ori", rd, rs1, imm);
2533838Shsul@eecs.umich.edu    return rd;
2543838Shsul@eecs.umich.edu}
2553838Shsul@eecs.umich.edu
2563838Shsul@eecs.umich.eduinline uint64_t
2573838Shsul@eecs.umich.eduandi(uint64_t rs1, const uint16_t imm)
2583838Shsul@eecs.umich.edu{
2593838Shsul@eecs.umich.edu    uint64_t rd = 0;
2603838Shsul@eecs.umich.edu    IOP("andi", rd, rs1, imm);
2613838Shsul@eecs.umich.edu    return rd;
2623838Shsul@eecs.umich.edu}
2633838Shsul@eecs.umich.edu
2643838Shsul@eecs.umich.eduinline int64_t
2655004Sgblack@eecs.umich.eduslli(int64_t rs1, const uint16_t imm)
2663838Shsul@eecs.umich.edu{
2673838Shsul@eecs.umich.edu    int64_t rd = 0;
2683838Shsul@eecs.umich.edu    IOP("slli", rd, rs1, imm);
2693838Shsul@eecs.umich.edu    return rd;
2703838Shsul@eecs.umich.edu}
2713838Shsul@eecs.umich.edu
2723838Shsul@eecs.umich.eduinline uint64_t
2733838Shsul@eecs.umich.edusrli(uint64_t rs1, const uint16_t imm)
2743838Shsul@eecs.umich.edu{
2753838Shsul@eecs.umich.edu    uint64_t rd = 0;
2763838Shsul@eecs.umich.edu    IOP("srli", rd, rs1, imm);
2775004Sgblack@eecs.umich.edu    return rd;
2783838Shsul@eecs.umich.edu}
2793838Shsul@eecs.umich.edu
2803838Shsul@eecs.umich.eduinline int64_t
2813838Shsul@eecs.umich.edusrai(int64_t rs1, const uint16_t imm)
2823838Shsul@eecs.umich.edu{
2833838Shsul@eecs.umich.edu    int64_t rd = 0;
2843838Shsul@eecs.umich.edu    IOP("srai", rd, rs1, imm);
2853838Shsul@eecs.umich.edu    return rd;
2863838Shsul@eecs.umich.edu}
2873838Shsul@eecs.umich.edu
2883838Shsul@eecs.umich.eduinline int64_t
2893838Shsul@eecs.umich.eduadd(int64_t rs1, int64_t rs2)
2903838Shsul@eecs.umich.edu{
2913838Shsul@eecs.umich.edu    int64_t rd = 0;
2923838Shsul@eecs.umich.edu    ROP("add", rd, rs1, rs2);
2933838Shsul@eecs.umich.edu    return rd;
2943838Shsul@eecs.umich.edu}
2953838Shsul@eecs.umich.edu
2963838Shsul@eecs.umich.eduinline int64_t
2973838Shsul@eecs.umich.edusub(int64_t rs1, int64_t rs2)
2983838Shsul@eecs.umich.edu{
2993838Shsul@eecs.umich.edu    int64_t rd = 0;
3003838Shsul@eecs.umich.edu    ROP("sub", rd, rs1, rs2);
3013838Shsul@eecs.umich.edu    return rd;
3023838Shsul@eecs.umich.edu}
3033838Shsul@eecs.umich.edu
3043838Shsul@eecs.umich.eduinline int64_t
3053838Shsul@eecs.umich.edusll(int64_t rs1, int64_t rs2)
3063838Shsul@eecs.umich.edu{
3073838Shsul@eecs.umich.edu    int64_t rd = 0;
3083838Shsul@eecs.umich.edu    ROP("sll", rd, rs1, rs2);
3093838Shsul@eecs.umich.edu    return rd;
3103838Shsul@eecs.umich.edu}
3113838Shsul@eecs.umich.edu
3123838Shsul@eecs.umich.eduinline bool
3133838Shsul@eecs.umich.eduslt(int64_t rs1, int64_t rs2)
3143838Shsul@eecs.umich.edu{
3154967Sacolyte@umich.edu    bool rd = false;
3163838Shsul@eecs.umich.edu    ROP("slt", rd, rs1, rs2);
3174375Sgblack@eecs.umich.edu    return rd;
3184375Sgblack@eecs.umich.edu}
3194375Sgblack@eecs.umich.edu
3204375Sgblack@eecs.umich.eduinline bool
3213838Shsul@eecs.umich.edusltu(uint64_t rs1, uint64_t rs2)
3223838Shsul@eecs.umich.edu{
3233838Shsul@eecs.umich.edu    bool rd = false;
3243838Shsul@eecs.umich.edu    ROP("sltu", rd, rs1, rs2);
3253838Shsul@eecs.umich.edu    return rd;
3263453Sgblack@eecs.umich.edu}
3273453Sgblack@eecs.umich.edu
3283838Shsul@eecs.umich.eduinline uint64_t
3293838Shsul@eecs.umich.eduxor_inst(uint64_t rs1, uint64_t rs2)
3303838Shsul@eecs.umich.edu{
3313838Shsul@eecs.umich.edu    uint64_t rd = 0;
3323838Shsul@eecs.umich.edu    ROP("xor", rd, rs1, rs2);
3333838Shsul@eecs.umich.edu    return rd;
3343838Shsul@eecs.umich.edu}
3352SN/A
3362SN/Ainline uint64_t
3373838Shsul@eecs.umich.edusrl(uint64_t rs1, uint64_t rs2)
3383838Shsul@eecs.umich.edu{
3393838Shsul@eecs.umich.edu    uint64_t rd = 0;
3403838Shsul@eecs.umich.edu    ROP("srl", rd, rs1, rs2);
3414172Ssaidi@eecs.umich.edu    return rd;
3424088Sbinkertn@umich.edu}
3433838Shsul@eecs.umich.edu
3444088Sbinkertn@umich.eduinline int64_t
3453838Shsul@eecs.umich.edusra(int64_t rs1, int64_t rs2)
3464088Sbinkertn@umich.edu{
3473838Shsul@eecs.umich.edu    int64_t rd = 0;
3484172Ssaidi@eecs.umich.edu    ROP("sra", rd, rs1, rs2);
3493838Shsul@eecs.umich.edu    return rd;
350555SN/A}
3512532SN/A
352555SN/Ainline uint64_t
3532SN/Aor_inst(uint64_t rs1, uint64_t rs2)
3543838Shsul@eecs.umich.edu{
355551SN/A    uint64_t rd = 0;
3561858SN/A    ROP("or", rd, rs1, rs2);
3573838Shsul@eecs.umich.edu    return rd;
3583838Shsul@eecs.umich.edu}
3593838Shsul@eecs.umich.edu
3603838Shsul@eecs.umich.eduinline uint64_t
3613838Shsul@eecs.umich.eduand_inst(uint64_t rs1, uint64_t rs2)
362924SN/A{
363828SN/A    uint64_t rd = 0;
3643838Shsul@eecs.umich.edu    ROP("and", rd, rs1, rs2);
3653838Shsul@eecs.umich.edu    return rd;
3664172Ssaidi@eecs.umich.edu}
3675004Sgblack@eecs.umich.edu
3683838Shsul@eecs.umich.eduinline int64_t
3693838Shsul@eecs.umich.eduaddiw(int64_t rs1, const int16_t imm)
3705004Sgblack@eecs.umich.edu{
3713838Shsul@eecs.umich.edu    int64_t rd = 0;
3723838Shsul@eecs.umich.edu    IOP("addiw", rd, rs1, imm);
3733838Shsul@eecs.umich.edu    return rd;
3743838Shsul@eecs.umich.edu}
3755004Sgblack@eecs.umich.edu
3763838Shsul@eecs.umich.eduinline int64_t
3773838Shsul@eecs.umich.eduslliw(int64_t rs1, const uint16_t imm)
3783838Shsul@eecs.umich.edu{
3793838Shsul@eecs.umich.edu    int64_t rd = 0;
3805004Sgblack@eecs.umich.edu    IOP("slliw", rd, rs1, imm);
3814172Ssaidi@eecs.umich.edu    return rd;
3823838Shsul@eecs.umich.edu}
3833838Shsul@eecs.umich.edu
3843838Shsul@eecs.umich.eduinline uint64_t
3853838Shsul@eecs.umich.edusrliw(uint64_t rs1, const uint16_t imm)
3863838Shsul@eecs.umich.edu{
3873838Shsul@eecs.umich.edu    uint64_t rd = 0;
3883838Shsul@eecs.umich.edu    IOP("srliw", rd, rs1, imm);
3893838Shsul@eecs.umich.edu    return rd;
3903838Shsul@eecs.umich.edu}
3913838Shsul@eecs.umich.edu
3923838Shsul@eecs.umich.eduinline int64_t
3933838Shsul@eecs.umich.edusraiw(int64_t rs1, const uint16_t imm)
3943838Shsul@eecs.umich.edu{
3953838Shsul@eecs.umich.edu    int64_t rd = 0;
3963838Shsul@eecs.umich.edu    IOP("sraiw", rd, rs1, imm);
3973838Shsul@eecs.umich.edu    return rd;
3983838Shsul@eecs.umich.edu}
3993838Shsul@eecs.umich.edu
4003838Shsul@eecs.umich.eduinline int64_t
4013838Shsul@eecs.umich.eduaddw(int64_t rs1,  int64_t rs2)
4023838Shsul@eecs.umich.edu{
4033838Shsul@eecs.umich.edu    int64_t rd = 0;
4043838Shsul@eecs.umich.edu    ROP("addw", rd, rs1, rs2);
4053838Shsul@eecs.umich.edu    return rd;
4063838Shsul@eecs.umich.edu}
4073838Shsul@eecs.umich.edu
4083838Shsul@eecs.umich.eduinline int64_t
4093838Shsul@eecs.umich.edusubw(int64_t rs1,  int64_t rs2)
4103838Shsul@eecs.umich.edu{
4113838Shsul@eecs.umich.edu    int64_t rd = 0;
4123838Shsul@eecs.umich.edu    ROP("subw", rd, rs1, rs2);
4133838Shsul@eecs.umich.edu    return rd;
4143838Shsul@eecs.umich.edu}
4153838Shsul@eecs.umich.edu
4163838Shsul@eecs.umich.eduinline int64_t
4173838Shsul@eecs.umich.edusllw(int64_t rs1,  int64_t rs2)
4183838Shsul@eecs.umich.edu{
4193838Shsul@eecs.umich.edu    int64_t rd = 0;
4203838Shsul@eecs.umich.edu    ROP("sllw", rd, rs1, rs2);
4213838Shsul@eecs.umich.edu    return rd;
4223838Shsul@eecs.umich.edu}
4233838Shsul@eecs.umich.edu
4243838Shsul@eecs.umich.eduinline uint64_t
4253838Shsul@eecs.umich.edusrlw(uint64_t rs1,  uint64_t rs2)
4263838Shsul@eecs.umich.edu{
4273838Shsul@eecs.umich.edu    uint64_t rd = 0;
4283838Shsul@eecs.umich.edu    ROP("srlw", rd, rs1, rs2);
4293838Shsul@eecs.umich.edu    return rd;
4303838Shsul@eecs.umich.edu}
4313838Shsul@eecs.umich.edu
4323838Shsul@eecs.umich.eduinline int64_t
4333838Shsul@eecs.umich.edusraw(int64_t rs1,  int64_t rs2)
4343838Shsul@eecs.umich.edu{
4353838Shsul@eecs.umich.edu    int64_t rd = 0;
4363838Shsul@eecs.umich.edu    ROP("sraw", rd, rs1, rs2);
4373838Shsul@eecs.umich.edu    return rd;
4383838Shsul@eecs.umich.edu}
4393838Shsul@eecs.umich.edu
4403838Shsul@eecs.umich.edu} // namespace I
4413838Shsul@eecs.umich.edu