blob: a4a4bdf23cf4fc119bbfe016a5519a21ca567cc1 [file] [log] [blame]
// Copyright (c) 2022, the R8 project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
package com.android.tools.r8.lightir;
/** Simple utilities for byte encodings. */
public class ByteUtils {
public static boolean isU1(int value) {
return (0 <= value) && (value <= 0xFF);
}
// Lossy truncation of an integer value to its lowest byte.
private static int truncateToU1(int value) {
return value & 0xFF;
}
public static int ensureU1(int value) {
assert isU1(value);
return truncateToU1(value);
}
public static int fromU1(byte value) {
return value & 0xFF;
}
public static int intEncodingSize(int value) {
return 4;
}
public static void writeEncodedInt(int value, ByteWriter writer) {
assert 4 == intEncodingSize(value);
writer.put(truncateToU1(value >> 24));
writer.put(truncateToU1(value >> 16));
writer.put(truncateToU1(value >> 8));
writer.put(truncateToU1(value));
}
public static boolean isU2(int value) {
return (value >= 0) && (value <= 0xFFFF);
}
public static int unsetBitAtIndex(int value, int index) {
return value & ~(1 << (index - 1));
}
public static int setBitAtIndex(int value, int index) {
return value | (1 << (index - 1));
}
}