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