< prev index next >

src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.asm.sparc/src/org/graalvm/compiler/asm/sparc/SPARCAssembler.java

Print this page




 119 import static org.graalvm.compiler.asm.sparc.SPARCAssembler.Opfs.Movxtod;
 120 import static org.graalvm.compiler.asm.sparc.SPARCAssembler.Opfs.UMulxhi;
 121 import static org.graalvm.compiler.asm.sparc.SPARCAssembler.Ops.ArithOp;
 122 import static org.graalvm.compiler.asm.sparc.SPARCAssembler.Ops.LdstOp;
 123 import static java.lang.String.format;
 124 import static jdk.vm.ci.sparc.SPARC.CPU;
 125 import static jdk.vm.ci.sparc.SPARC.FPUd;
 126 import static jdk.vm.ci.sparc.SPARC.FPUs;
 127 import static jdk.vm.ci.sparc.SPARC.g0;
 128 import static jdk.vm.ci.sparc.SPARC.g2;
 129 import static jdk.vm.ci.sparc.SPARC.g5;
 130 import static jdk.vm.ci.sparc.SPARC.g7;
 131 import static jdk.vm.ci.sparc.SPARC.o7;
 132 
 133 import java.util.ArrayList;
 134 import java.util.HashMap;
 135 import java.util.List;
 136 import java.util.Map;
 137 
 138 import org.graalvm.compiler.asm.Assembler;

 139 import org.graalvm.compiler.asm.Label;
 140 import org.graalvm.compiler.core.common.NumUtil;
 141 import org.graalvm.compiler.core.common.PermanentBailoutException;
 142 import org.graalvm.compiler.debug.GraalError;
 143 
 144 import jdk.vm.ci.code.Register;
 145 import jdk.vm.ci.code.TargetDescription;
 146 import jdk.vm.ci.meta.JavaConstant;
 147 import jdk.vm.ci.meta.PlatformKind;
 148 import jdk.vm.ci.sparc.SPARC;
 149 import jdk.vm.ci.sparc.SPARC.CPUFeature;
 150 import jdk.vm.ci.sparc.SPARCKind;
 151 
 152 /**
 153  * This class implements an assembler that can encode most SPARC instructions.
 154  */
 155 public abstract class SPARCAssembler extends Assembler {
 156 
 157     /**
 158      * Constructs an assembler for the SPARC architecture.
 159      */
 160     public SPARCAssembler(TargetDescription target) {
 161         super(target);


1264         }
1265 
1266         @Override
1267         protected int setBits(int word) {
1268             return BitSpec.op2.setBits(super.setBits(word), op2.value);
1269         }
1270 
1271         protected int setDisp(int inst, SPARCMacroAssembler masm, Label lab) {
1272             if (lab.isBound()) {
1273                 int d = (lab.position() - masm.position()) / 4;
1274                 return setDisp(inst, d);
1275             } else {
1276                 masm.patchUnbound(lab);
1277                 return inst;
1278             }
1279         }
1280 
1281         public int setDisp(int inst, int d) {
1282             assert this.match(inst);
1283             if (!isValidDisp(d)) {
1284                 throw new PermanentBailoutException("Too large displacement 0x%x in field %s in instruction %s", d, this.disp, this);
1285             }
1286             return this.disp.setBits(inst, d);
1287         }
1288 
1289         public boolean isValidDisp(int d) {
1290             return this.disp.valueFits(d);
1291         }
1292 
1293         public int setAnnul(int inst, boolean a) {
1294             return BitSpec.a.setBits(inst, a ? 1 : 0);
1295         }
1296 
1297         @Override
1298         protected List<BitKey[]> getKeys() {
1299             List<BitKey[]> keys = super.getKeys();
1300             keys.add(op2Key);
1301             return keys;
1302         }
1303 
1304         public int getDisp(int inst) {




 119 import static org.graalvm.compiler.asm.sparc.SPARCAssembler.Opfs.Movxtod;
 120 import static org.graalvm.compiler.asm.sparc.SPARCAssembler.Opfs.UMulxhi;
 121 import static org.graalvm.compiler.asm.sparc.SPARCAssembler.Ops.ArithOp;
 122 import static org.graalvm.compiler.asm.sparc.SPARCAssembler.Ops.LdstOp;
 123 import static java.lang.String.format;
 124 import static jdk.vm.ci.sparc.SPARC.CPU;
 125 import static jdk.vm.ci.sparc.SPARC.FPUd;
 126 import static jdk.vm.ci.sparc.SPARC.FPUs;
 127 import static jdk.vm.ci.sparc.SPARC.g0;
 128 import static jdk.vm.ci.sparc.SPARC.g2;
 129 import static jdk.vm.ci.sparc.SPARC.g5;
 130 import static jdk.vm.ci.sparc.SPARC.g7;
 131 import static jdk.vm.ci.sparc.SPARC.o7;
 132 
 133 import java.util.ArrayList;
 134 import java.util.HashMap;
 135 import java.util.List;
 136 import java.util.Map;
 137 
 138 import org.graalvm.compiler.asm.Assembler;
 139 import org.graalvm.compiler.asm.BranchTargetOutOfBoundsException;
 140 import org.graalvm.compiler.asm.Label;
 141 import org.graalvm.compiler.core.common.NumUtil;

 142 import org.graalvm.compiler.debug.GraalError;
 143 
 144 import jdk.vm.ci.code.Register;
 145 import jdk.vm.ci.code.TargetDescription;
 146 import jdk.vm.ci.meta.JavaConstant;
 147 import jdk.vm.ci.meta.PlatformKind;
 148 import jdk.vm.ci.sparc.SPARC;
 149 import jdk.vm.ci.sparc.SPARC.CPUFeature;
 150 import jdk.vm.ci.sparc.SPARCKind;
 151 
 152 /**
 153  * This class implements an assembler that can encode most SPARC instructions.
 154  */
 155 public abstract class SPARCAssembler extends Assembler {
 156 
 157     /**
 158      * Constructs an assembler for the SPARC architecture.
 159      */
 160     public SPARCAssembler(TargetDescription target) {
 161         super(target);


1264         }
1265 
1266         @Override
1267         protected int setBits(int word) {
1268             return BitSpec.op2.setBits(super.setBits(word), op2.value);
1269         }
1270 
1271         protected int setDisp(int inst, SPARCMacroAssembler masm, Label lab) {
1272             if (lab.isBound()) {
1273                 int d = (lab.position() - masm.position()) / 4;
1274                 return setDisp(inst, d);
1275             } else {
1276                 masm.patchUnbound(lab);
1277                 return inst;
1278             }
1279         }
1280 
1281         public int setDisp(int inst, int d) {
1282             assert this.match(inst);
1283             if (!isValidDisp(d)) {
1284                 throw new BranchTargetOutOfBoundsException(true, "Too large displacement 0x%x in field %s in instruction %s", d, this.disp, this);
1285             }
1286             return this.disp.setBits(inst, d);
1287         }
1288 
1289         public boolean isValidDisp(int d) {
1290             return this.disp.valueFits(d);
1291         }
1292 
1293         public int setAnnul(int inst, boolean a) {
1294             return BitSpec.a.setBits(inst, a ? 1 : 0);
1295         }
1296 
1297         @Override
1298         protected List<BitKey[]> getKeys() {
1299             List<BitKey[]> keys = super.getKeys();
1300             keys.add(op2Key);
1301             return keys;
1302         }
1303 
1304         public int getDisp(int inst) {


< prev index next >