@Specialization public LLVMAddress executeDouble(int left, int right, LLVMAddress addr) { int result = left + right; boolean overflow = (((left ^ result) & (right ^ result)) < 0); LLVMMemory.putI32(addr, result); LLVMMemory.putI32(addr.increment(OVERFLOW_FIELD_OFFSET), overflow ? 1 : 0); return addr; }
@Override public LLVMAddress executePointee(VirtualFrame frame) { LLVMAddress targetAggr = super.executePointee(frame); LLVMAddress insertPosition = targetAggr.increment(offset); float value = element.executeFloat(frame); LLVMMemory.putFloat(insertPosition, value); return targetAggr; }
@Specialization public Object executeIntrinsic(LLVMAddress value) { byte c; LLVMAddress adr = value; int count = 0; while ((c = LLVMMemory.getI8(adr)) != 0) { count++; adr = adr.increment(Byte.BYTES); } byte[] bytes = new byte[count]; count = 0; adr = value; while ((c = LLVMMemory.getI8(adr)) != 0) { bytes[count++] = c; adr = adr.increment(Byte.BYTES); } return bytes; }