300 case IS_NON_NULL:
301 assert args.length == 1;
302 b.push(returnKind, comparisonOp(b, Condition.NE, args[0], ConstantNode.forIntegerKind(wordKind, 0L)));
303 break;
304
305 case NOT:
306 assert args.length == 1;
307 b.addPush(returnKind, new XorNode(args[0], b.add(forIntegerKind(wordKind, -1))));
308 break;
309
310 case READ_POINTER:
311 case READ_OBJECT:
312 case READ_BARRIERED: {
313 assert args.length == 2 || args.length == 3;
314 JavaKind readKind = wordTypes.asKind(wordMethod.getSignature().getReturnType(wordMethod.getDeclaringClass()));
315 AddressNode address = makeAddress(b, args[0], args[1]);
316 LocationIdentity location;
317 if (args.length == 2) {
318 location = any();
319 } else {
320 assert args[2].isConstant();
321 location = snippetReflection.asObject(LocationIdentity.class, args[2].asJavaConstant());
322 }
323 b.push(returnKind, readOp(b, readKind, address, location, operation.opcode()));
324 break;
325 }
326 case READ_HEAP: {
327 assert args.length == 3;
328 JavaKind readKind = wordTypes.asKind(wordMethod.getSignature().getReturnType(wordMethod.getDeclaringClass()));
329 AddressNode address = makeAddress(b, args[0], args[1]);
330 BarrierType barrierType = snippetReflection.asObject(BarrierType.class, args[2].asJavaConstant());
331 b.push(returnKind, readOp(b, readKind, address, any(), barrierType, true));
332 break;
333 }
334 case WRITE_POINTER:
335 case WRITE_OBJECT:
336 case WRITE_BARRIERED:
337 case INITIALIZE: {
338 assert args.length == 3 || args.length == 4;
339 JavaKind writeKind = wordTypes.asKind(wordMethod.getSignature().getParameterType(wordMethod.isStatic() ? 2 : 1, wordMethod.getDeclaringClass()));
340 AddressNode address = makeAddress(b, args[0], args[1]);
341 LocationIdentity location;
|
300 case IS_NON_NULL:
301 assert args.length == 1;
302 b.push(returnKind, comparisonOp(b, Condition.NE, args[0], ConstantNode.forIntegerKind(wordKind, 0L)));
303 break;
304
305 case NOT:
306 assert args.length == 1;
307 b.addPush(returnKind, new XorNode(args[0], b.add(forIntegerKind(wordKind, -1))));
308 break;
309
310 case READ_POINTER:
311 case READ_OBJECT:
312 case READ_BARRIERED: {
313 assert args.length == 2 || args.length == 3;
314 JavaKind readKind = wordTypes.asKind(wordMethod.getSignature().getReturnType(wordMethod.getDeclaringClass()));
315 AddressNode address = makeAddress(b, args[0], args[1]);
316 LocationIdentity location;
317 if (args.length == 2) {
318 location = any();
319 } else {
320 assert args[2].isConstant() : args[2];
321 location = snippetReflection.asObject(LocationIdentity.class, args[2].asJavaConstant());
322 assert location != null : snippetReflection.asObject(Object.class, args[2].asJavaConstant());
323 }
324 b.push(returnKind, readOp(b, readKind, address, location, operation.opcode()));
325 break;
326 }
327 case READ_HEAP: {
328 assert args.length == 3;
329 JavaKind readKind = wordTypes.asKind(wordMethod.getSignature().getReturnType(wordMethod.getDeclaringClass()));
330 AddressNode address = makeAddress(b, args[0], args[1]);
331 BarrierType barrierType = snippetReflection.asObject(BarrierType.class, args[2].asJavaConstant());
332 b.push(returnKind, readOp(b, readKind, address, any(), barrierType, true));
333 break;
334 }
335 case WRITE_POINTER:
336 case WRITE_OBJECT:
337 case WRITE_BARRIERED:
338 case INITIALIZE: {
339 assert args.length == 3 || args.length == 4;
340 JavaKind writeKind = wordTypes.asKind(wordMethod.getSignature().getParameterType(wordMethod.isStatic() ? 2 : 1, wordMethod.getDeclaringClass()));
341 AddressNode address = makeAddress(b, args[0], args[1]);
342 LocationIdentity location;
|