Advertisement
WarPie90

Untitled

Jun 21st, 2025
456
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 2.18 KB | None | 0 0
  1.        // Binary integer operations
  2.         // onoptimized generalized path for intergers
  3.         bcADD, bcSUB, bcMUL, bcDIV, bcMOD, bcBND, bcBOR, bcXOR,
  4.         bcEQ, bcNEQ, bcGT, bcLT, bcGTE, bcLTE:
  5.           begin
  6.             // Handle left operand
  7.             case Args[0].Pos of
  8.               mpImm:
  9.                 leftVal := Args[0].Arg;
  10.               mpLocal:
  11.                 Move(Pointer(Stack.GetArg(Args[0].Arg))^, leftVal, XprTypeSize[Args[0].Typ]);
  12.               mpGlobal:
  13.                 Move(Pointer(Stack.GetGlobal(Args[0].Arg))^, leftVal, XprTypeSize[Args[0].Typ]);
  14.             end;
  15.  
  16.             // Handle right operand
  17.             case Args[1].Pos of
  18.               mpImm:
  19.                 rightval := Args[1].Arg;
  20.               mpLocal:
  21.                 Move(Pointer(Stack.GetArg(Args[1].Arg))^, rightval, XprTypeSize[Args[1].Typ]);
  22.               mpGlobal:
  23.                 Move(Pointer(Stack.GetGlobal(Args[1].Arg))^, rightval, XprTypeSize[Args[1].Typ]);
  24.             end;
  25.  
  26.             // Perform operation
  27.             case Code of
  28.               bcADD: leftVal := leftVal + rightVal;
  29.               bcSUB: leftVal := leftVal - rightVal;
  30.               bcMUL: leftVal := leftVal * rightVal;
  31.               bcDIV: leftVal := leftVal div rightVal;
  32.               bcMOD: leftVal := leftVal mod rightVal;
  33.               bcBND: leftVal := leftVal and rightVal;
  34.               bcBOR: leftVal := leftVal or rightVal;
  35.               bcXOR: leftVal := leftVal xor rightVal;
  36.               bcEQ:  leftVal := Ord(leftVal = rightVal);
  37.               bcNEQ: leftVal := Ord(leftVal <> rightVal);
  38.               bcGT:  leftVal := Ord(leftVal > rightVal);
  39.               bcLT:  leftVal := Ord(leftVal < rightVal);
  40.               bcGTE: leftVal := Ord(leftVal >= rightVal);
  41.               bcLTE: leftVal := Ord(leftVal <= rightVal);
  42.             end;
  43.  
  44.             // Store result
  45.             case Args[2].Pos of
  46.               mpLocal:
  47.                 Move(leftVal, Stack.GetLocal(Args[2].Arg, SizeOf(Int64))^, XprTypeSize[Args[2].Typ]);
  48.               mpGlobal:
  49.                 Move(leftVal, Stack.GetGlobal(Args[2].Arg)^, XprTypeSize[Args[2].Typ]);
  50.             end;
  51.  
  52.           end;                      
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement