/* * Copyright (c) 2007, 2011, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * version 2 for more details (a copy is included in the LICENSE file that * accompanied this code). * * You should have received a copy of the GNU General Public License version * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA * or visit www.oracle.com if you need additional information or have any * questions. */ package com.sun.max.asm.gen.risc.sparc; import com.sun.max.asm.gen.*; import com.sun.max.asm.gen.risc.*; import com.sun.max.asm.gen.risc.field.*; import com.sun.max.asm.sparc.*; import com.sun.max.lang.*; /** * The fields used in defining the SPARC instruction templates. */ public final class SPARCFields { private SPARCFields() { } // Checkstyle: stop constant name checks private static final ConstantField bits_29_29 = ConstantField.createDescending(29, 29); public static RiscConstant bits_29_29(int value) { return bits_29_29.constant(value); } private static final ConstantField bits_29_27 = ConstantField.createDescending(29, 27); public static RiscConstant bits_29_27(int value) { return bits_29_27.constant(value); } private static final ConstantField bits_28_28 = ConstantField.createDescending(28, 28); public static RiscConstant bits_28_28(int value) { return bits_28_28.constant(value); } private static final ConstantField bits_24_22 = ConstantField.createDescending(24, 22); public static RiscConstant bits_24_22(int value) { return bits_24_22.constant(value); } private static final ConstantField bits_18_18 = ConstantField.createDescending(18, 18); public static RiscConstant bits_18_18(int value) { return bits_18_18.constant(value); } private static final ConstantField bits_18_14 = ConstantField.createDescending(18, 14); public static RiscConstant bits_18_14(int value) { return bits_18_14.constant(value); } private static final ConstantField bits_13_13 = ConstantField.createDescending(13, 13); public static RiscConstant bits_13_13(int value) { return bits_13_13.constant(value); } private static final ConstantField cond_17_14 = ConstantField.createDescending(17, 14); public static RiscConstant cond_17_14(int value) { return cond_17_14.constant(value); } private static final ConstantField fcnc = ConstantField.createDescending(29, 25); public static RiscConstant fcnc(int value) { return fcnc.constant(value); } private static final ConstantField i = ConstantField.createDescending(13, 13); public static RiscConstant i(int value) { return i.constant(value); } private static final ConstantField movTypeBit = ConstantField.createDescending(18, 18); public static RiscConstant movTypeBit(int value) { return movTypeBit.constant(value); } private static final ConstantField fmovTypeBit = ConstantField.createDescending(13, 13); public static RiscConstant fmovTypeBit(int value) { return fmovTypeBit.constant(value); } private static final ConstantField op = ConstantField.createDescending(31, 30); public static RiscConstant op(int value) { return op.constant(value); } private static final ConstantField op2 = ConstantField.createDescending(24, 22); public static RiscConstant op2(int value) { return op2.constant(value); } private static final ConstantField op3 = ConstantField.createDescending(24, 19); public static RiscConstant op3(int value) { return op3.constant(value); } private static final ConstantField opf = ConstantField.createDescending(13, 5); public static RiscConstant opf(int value) { return opf.constant(value); } private static final ConstantField opfLow_10_5 = ConstantField.createDescending(10, 5); public static RiscConstant opfLow_10_5(int value) { return opfLow_10_5.constant(value); } private static final ConstantField opfLow_9_5 = ConstantField.createDescending(9, 5); public static RiscConstant opfLow_9_5(int value) { return opfLow_9_5.constant(value); } private static final ConstantField rcond_12_10 = ConstantField.createDescending(12, 10); public static RiscConstant rcond_12_10(int value) { return rcond_12_10.constant(value); } private static final ConstantField x = ConstantField.createDescending(12, 12); public static RiscConstant x(int value) { return x.constant(value); } public static final IgnoredOperandField const22 = IgnoredOperandField.createDescendingIgnored(21, 0); public static final ImmediateOperandField fcn = ImmediateOperandField.createDescending(29, 25); public static final ImmediateOperandField imm22 = ImmediateOperandField.createDescending(21, 0).beSignedOrUnsigned(); public static RiscConstant imm22(int value) { return imm22.constant(value); } public static final ImmediateOperandField immAsi = ImmediateOperandField.createDescending(12, 5); public static RiscConstant immAsi(int value) { return immAsi.constant(value); } public static final ImmediateOperandField shcnt32 = ImmediateOperandField.createDescending(4, 0); public static final ImmediateOperandField shcnt64 = ImmediateOperandField.createDescending(5, 0); public static final ImmediateOperandField simm10 = ImmediateOperandField.createDescending(9, 0).beSigned(); public static final ImmediateOperandField simm11 = ImmediateOperandField.createDescending(10, 0).beSigned(); public static final ImmediateOperandField swTrapNumber = ImmediateOperandField.createDescending(6, 0); static { swTrapNumber.setVariableName("software_trap_number"); } public static final ImmediateOperandField simm13 = ImmediateOperandField.createDescending(12, 0).beSigned(); public static RiscConstant simm13(int value) { return simm13.constant(value); } public static final BranchDisplacementOperandField disp30 = BranchDisplacementOperandField.createDescendingBranchDisplacementOperandField(29, 0); public static final BranchDisplacementOperandField disp22 = BranchDisplacementOperandField.createDescendingBranchDisplacementOperandField(21, 0); public static final BranchDisplacementOperandField disp19 = BranchDisplacementOperandField.createDescendingBranchDisplacementOperandField(18, 0); public static final BranchDisplacementOperandField d16 = BranchDisplacementOperandField.createDescendingBranchDisplacementOperandField(21, 20, 13, 0); public static final SymbolicOperandField<MembarOperand> membarMask = SymbolicOperandField.createDescending(MembarOperand.SYMBOLIZER, 6, 0); private static SymbolicOperandField<ICCOperand> createICCOperandField(int... bits) { return SymbolicOperandField.createDescending("i_or_x_cc", ICCOperand.SYMBOLIZER, bits); } private static SymbolicOperandField<FCCOperand> createFCCOperandField(int... bits) { return SymbolicOperandField.createDescending("n", FCCOperand.SYMBOLIZER, bits); } public static final SymbolicOperandField<ICCOperand> cc = createICCOperandField(21, 20); public static RiscConstant cc(ICCOperand icc) { return cc.constant(icc); } public static final SymbolicOperandField<FCCOperand> fcc_26_25 = createFCCOperandField(26, 25); public static final SymbolicOperandField<FCCOperand> fcc_21_20 = createFCCOperandField(21, 20); public static final SymbolicOperandField<ICCOperand> fmovicc = createICCOperandField(12, 11); public static final SymbolicOperandField<FCCOperand> fmovfcc = createFCCOperandField(12, 11); public static final SymbolicOperandField<ICCOperand> movicc = createICCOperandField(12, 11); public static final SymbolicOperandField<FCCOperand> movfcc = createFCCOperandField(12, 11); public static final SymbolicOperandField<GPR> rs1 = SymbolicOperandField.createDescending(GPR.SYMBOLIZER, 18, 14); public static RiscConstant rs1(GPR gpr) { return rs1.constant(gpr); } public static SymbolicOperandField<GPR> rs1(Expression expression) { return rs1.bindTo(expression); } public static RiscConstant rs1(int value) { return rs1.constant(value); } public static final SymbolicOperandField<StateRegister> rs1_state = SymbolicOperandField.createDescending("rs1", StateRegister.SYMBOLIZER, 18, 14); public static RiscConstant rs1_state(int value) { return rs1_state.constant(value); } public static final SymbolicOperandField<GPR> rs2 = SymbolicOperandField.createDescending(GPR.SYMBOLIZER, 4, 0); public static RiscConstant rs2(GPR gpr) { return rs2.constant(gpr); } public static SymbolicOperandField<GPR> rs2(Expression expression) { return rs2.bindTo(expression); } public static final SymbolicOperandField<GPR> rd = SymbolicOperandField.createDescending(GPR.SYMBOLIZER, 29, 25); public static RiscConstant rd(GPR gpr) { return rd.constant(gpr); } public static RiscConstant rd(int value) { return rd.constant(value); } public static final SymbolicOperandField<GPR.Even> rd_even = SymbolicOperandField.createDescending("rd", GPR.EVEN_SYMBOLIZER, 29, 25); public static final SymbolicOperandField<StateRegister.Writable> rd_state = SymbolicOperandField.createDescending("rd", StateRegister.WRITE_ONLY_SYMBOLIZER, 29, 25); public static final SymbolicOperandField<ICCOperand> tcc = createICCOperandField(12, 11); public static final SymbolicOperandField<SFPR> sfrs1 = SymbolicOperandField.createDescending("rs1", SFPR.SYMBOLIZER, 18, 14); public static final SymbolicOperandField<SFPR> sfrs2 = SymbolicOperandField.createDescending("rs2", SFPR.SYMBOLIZER, 4, 0); public static final SymbolicOperandField<SFPR> sfrd = SymbolicOperandField.createDescending("rd", SFPR.SYMBOLIZER, 29, 25); public static final SymbolicOperandField<DFPR> dfrs1 = SymbolicOperandField.createDescending("rs1", DFPR.SYMBOLIZER, 14, 14, 18, 15, -1); public static final SymbolicOperandField<DFPR> dfrs2 = SymbolicOperandField.createDescending("rs2", DFPR.SYMBOLIZER, 0, 0, 4, 1, -1); public static final SymbolicOperandField<DFPR> dfrd = SymbolicOperandField.createDescending("rd", DFPR.SYMBOLIZER, 25, 25, 29, 26, -1); public static final SymbolicOperandField<PrivilegedRegister> rs1PrivReg = SymbolicOperandField.createDescending("rs1", PrivilegedRegister.SYMBOLIZER, 18, 14); public static final SymbolicOperandField<PrivilegedRegister.Writable> rdPrivReg = SymbolicOperandField.createDescending("rd", PrivilegedRegister.WRITE_ONLY_SYMBOLIZER, 29, 25); private static final SymbolicOperandField<QFPR> qfrs1_raw = SymbolicOperandField.createDescending("rs1", QFPR.SYMBOLIZER, 14, 14, 18, 16, -2); private static final SymbolicOperandField<QFPR> qfrs2_raw = SymbolicOperandField.createDescending("rs2", QFPR.SYMBOLIZER, 0, 0, 4, 2, -2); private static final SymbolicOperandField<QFPR> qfrd_raw = SymbolicOperandField.createDescending("rd", QFPR.SYMBOLIZER, 25, 25, 29, 27, -2); public static final Object[] qfrs1 = {qfrs1_raw, ReservedField.createDescending(15, 15)}; public static final Object[] qfrs2 = {qfrs2_raw, ReservedField.createDescending(1, 1)}; public static final Object[] qfrd = {qfrd_raw, ReservedField.createDescending(26, 26)}; public static final SymbolicOperandField<BPr> rcond_27_25 = SymbolicOperandField.createDescending("cond", BPr.SYMBOLIZER, 27, 25); public static RiscConstant rcond_27_25(BPr value) { return rcond_27_25.constant(value); } public static final SymbolicOperandField<FBfcc> fcond_28_25 = SymbolicOperandField.createDescending("cond", FBfcc.SYMBOLIZER, 28, 25); public static RiscConstant fcond_28_25(FBfcc value) { return fcond_28_25.constant(value); } public static final SymbolicOperandField<Bicc> icond_28_25 = SymbolicOperandField.createDescending("cond", Bicc.SYMBOLIZER, 28, 25); public static RiscConstant icond_28_25(Bicc value) { return icond_28_25.constant(value); } public static final SymbolicOperandField<AnnulBit> a = SymbolicOperandField.createDescending(AnnulBit.SYMBOLIZER, 29, 29); public static RiscConstant a(AnnulBit value) { return a.constant(value); } public static final SymbolicOperandField<BranchPredictionBit> p = SymbolicOperandField.createDescending(BranchPredictionBit.SYMBOLIZER, 19, 19); public static RiscConstant p(BranchPredictionBit value) { return p.constant(value); } public static final ReservedField res_29_29 = ReservedField.createDescending(29, 29); public static final ReservedField res_29_25 = ReservedField.createDescending(29, 25); public static final ReservedField res_18_14 = ReservedField.createDescending(18, 14); public static final ReservedField res_18_0 = ReservedField.createDescending(18, 0); public static final ReservedField res_13_0 = ReservedField.createDescending(13, 0); public static final ReservedField res_12_7 = ReservedField.createDescending(12, 7); public static final ReservedField res_12_5 = ReservedField.createDescending(12, 5); public static final ReservedField res_12_0 = ReservedField.createDescending(12, 0); public static final ReservedField res_11_6 = ReservedField.createDescending(11, 6); public static final ReservedField res_11_5 = ReservedField.createDescending(11, 5); public static final ReservedField res_10_7 = ReservedField.createDescending(10, 7); public static final ReservedField res_10_5 = ReservedField.createDescending(10, 5); public static final ReservedField res_9_5 = ReservedField.createDescending(9, 5); public static final ReservedField impl_dep = ReservedField.createDescending(29, 25, 18, 0); // Checkstyle: resume constant name checks static { StaticFieldName.Static.initialize(SPARCFields.class, new StaticFieldName.StringFunction() { public String function(String name) { if (name.startsWith("_")) { return name.substring(1); } return name; } }); StaticFieldLiteral.Static.initialize(SPARCFields.class); } }