1/*
2 * Copyright (c) 2006-2007 The Regents of The University of Michigan
3 * All rights reserved
4 * Copyright 2017 Google Inc.
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions are
8 * met: redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer;
10 * redistributions in binary form must reproduce the above copyright
11 * notice, this list of conditions and the following disclaimer in the
12 * documentation and/or other materials provided with the distribution;
13 * neither the name of the copyright holders nor the names of its
14 * contributors may be used to endorse or promote products derived from
15 * this software without specific prior written permission.
16 *
17 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
18 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
19 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
20 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
21 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
22 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
23 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
24 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
25 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
27 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28 *
29 * Authors: Ali Saidi
30 *          Gabe Black
31 *          Steve Reinhardt
32 */
33
34#include "arch/sparc/insts/priv.hh"
35
36namespace SparcISA
37{
38
39std::string
40Priv::generateDisassembly(Addr pc, const SymbolTable *symtab) const
41{
42    std::stringstream response;
43
44    printMnemonic(response, mnemonic);
45
46    return response.str();
47}
48
49std::string
50RdPriv::generateDisassembly(Addr pc, const SymbolTable *symtab) const
51{
52    std::stringstream response;
53
54    printMnemonic(response, mnemonic);
55
56    ccprintf(response, " %%%s, ", regName);
57    printDestReg(response, 0);
58
59    return response.str();
60}
61
62std::string
63WrPriv::generateDisassembly(Addr pc, const SymbolTable *symtab) const
64{
65    std::stringstream response;
66
67    printMnemonic(response, mnemonic);
68
69    ccprintf(response, " ");
70    // If the first reg is %g0, don't print it.
71    // This improves readability
72    if (_srcRegIdx[0].index() != 0) {
73        printSrcReg(response, 0);
74        ccprintf(response, ", ");
75    }
76    printSrcReg(response, 1);
77    ccprintf(response, ", %%%s", regName);
78
79    return response.str();
80}
81
82std::string
83WrPrivImm::generateDisassembly(Addr pc, const SymbolTable *symtab) const
84{
85    std::stringstream response;
86
87    printMnemonic(response, mnemonic);
88
89    ccprintf(response, " ");
90    // If the first reg is %g0, don't print it.
91    // This improves readability
92    if (_srcRegIdx[0].index() != 0) {
93        printSrcReg(response, 0);
94        ccprintf(response, ", ");
95    }
96    ccprintf(response, "%#x, %%%s", imm, regName);
97
98    return response.str();
99}
100
101}
102