graal/com.oracle.graal.compiler.amd64/src/com/oracle/graal/compiler/amd64/AMD64LIRGenerator.java
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File basic-graal Sdiff graal/com.oracle.graal.compiler.amd64/src/com/oracle/graal/compiler/amd64

graal/com.oracle.graal.compiler.amd64/src/com/oracle/graal/compiler/amd64/AMD64LIRGenerator.java

Print this page




 987     }
 988 
 989     @Override
 990     public Value emitBitScanForward(Value value) {
 991         Variable result = newVariable(LIRKind.derive(value).changeType(Kind.Int));
 992         append(new AMD64BitManipulationOp(BSF, result, asAllocatable(value)));
 993         return result;
 994     }
 995 
 996     @Override
 997     public Value emitBitScanReverse(Value value) {
 998         Variable result = newVariable(LIRKind.derive(value).changeType(Kind.Int));
 999         if (value.getKind().getStackKind() == Kind.Int) {
1000             append(new AMD64BitManipulationOp(IBSR, result, asAllocatable(value)));
1001         } else {
1002             append(new AMD64BitManipulationOp(LBSR, result, asAllocatable(value)));
1003         }
1004         return result;
1005     }
1006 




















1007     @Override
1008     public Value emitMathAbs(Value input) {
1009         Variable result = newVariable(LIRKind.derive(input));
1010         switch (input.getKind()) {
1011             case Float:
1012                 append(new BinaryRegConst(FAND, result, asAllocatable(input), JavaConstant.forFloat(Float.intBitsToFloat(0x7FFFFFFF))));
1013                 break;
1014             case Double:
1015                 append(new BinaryRegConst(DAND, result, asAllocatable(input), JavaConstant.forDouble(Double.longBitsToDouble(0x7FFFFFFFFFFFFFFFL))));
1016                 break;
1017             default:
1018                 throw GraalInternalError.shouldNotReachHere();
1019         }
1020         return result;
1021     }
1022 
1023     @Override
1024     public Value emitMathSqrt(Value input) {
1025         Variable result = newVariable(LIRKind.derive(input));
1026         append(new Unary2Op(SQRT, result, asAllocatable(input)));




 987     }
 988 
 989     @Override
 990     public Value emitBitScanForward(Value value) {
 991         Variable result = newVariable(LIRKind.derive(value).changeType(Kind.Int));
 992         append(new AMD64BitManipulationOp(BSF, result, asAllocatable(value)));
 993         return result;
 994     }
 995 
 996     @Override
 997     public Value emitBitScanReverse(Value value) {
 998         Variable result = newVariable(LIRKind.derive(value).changeType(Kind.Int));
 999         if (value.getKind().getStackKind() == Kind.Int) {
1000             append(new AMD64BitManipulationOp(IBSR, result, asAllocatable(value)));
1001         } else {
1002             append(new AMD64BitManipulationOp(LBSR, result, asAllocatable(value)));
1003         }
1004         return result;
1005     }
1006 
1007     public Value emitCountLeadingZeros(Value value) {
1008         Variable result = newVariable(LIRKind.derive(value).changeType(Kind.Int));
1009         if (value.getKind().getStackKind() == Kind.Int) {
1010             append(new AMD64BitManipulationOp(ILZCNT, result, asAllocatable(value)));
1011         } else {
1012             append(new AMD64BitManipulationOp(LLZCNT, result, asAllocatable(value)));
1013         }
1014         return result;
1015     }
1016 
1017     public Value emitCountTrailingZeros(Value value) {
1018         Variable result = newVariable(LIRKind.derive(value).changeType(Kind.Int));
1019         if (value.getKind().getStackKind() == Kind.Int) {
1020             append(new AMD64BitManipulationOp(ITZCNT, result, asAllocatable(value)));
1021         } else {
1022             append(new AMD64BitManipulationOp(LTZCNT, result, asAllocatable(value)));
1023         }
1024         return result;
1025     }
1026 
1027     @Override
1028     public Value emitMathAbs(Value input) {
1029         Variable result = newVariable(LIRKind.derive(input));
1030         switch (input.getKind()) {
1031             case Float:
1032                 append(new BinaryRegConst(FAND, result, asAllocatable(input), JavaConstant.forFloat(Float.intBitsToFloat(0x7FFFFFFF))));
1033                 break;
1034             case Double:
1035                 append(new BinaryRegConst(DAND, result, asAllocatable(input), JavaConstant.forDouble(Double.longBitsToDouble(0x7FFFFFFFFFFFFFFFL))));
1036                 break;
1037             default:
1038                 throw GraalInternalError.shouldNotReachHere();
1039         }
1040         return result;
1041     }
1042 
1043     @Override
1044     public Value emitMathSqrt(Value input) {
1045         Variable result = newVariable(LIRKind.derive(input));
1046         append(new Unary2Op(SQRT, result, asAllocatable(input)));


graal/com.oracle.graal.compiler.amd64/src/com/oracle/graal/compiler/amd64/AMD64LIRGenerator.java
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File