Пример #1
0
 @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;
 }
Пример #2
0
 @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;
 }
Пример #3
0
 @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;
 }