This commit is contained in:
huanghongxun
2015-11-17 12:51:04 +08:00
parent 39b6d68006
commit 159a992081
243 changed files with 2990 additions and 2836 deletions

View File

@@ -7,10 +7,10 @@
* This file has been put into the public domain.
* You can do whatever you want with this file.
*/
package org.tukaani.xz.simple;
public final class ARM implements SimpleFilter {
private final boolean isEncoder;
private int pos;
@@ -23,7 +23,7 @@ public final class ARM implements SimpleFilter {
int end = off + len - 4;
int i;
for (i = off; i <= end; i += 4) {
for (i = off; i <= end; i += 4)
if ((buf[i + 3] & 0xFF) == 0xEB) {
int src = ((buf[i + 2] & 0xFF) << 16)
| ((buf[i + 1] & 0xFF) << 8)
@@ -37,11 +37,10 @@ public final class ARM implements SimpleFilter {
dest = src - (pos + i - off);
dest >>>= 2;
buf[i + 2] = (byte)(dest >>> 16);
buf[i + 1] = (byte)(dest >>> 8);
buf[i] = (byte)dest;
buf[i + 2] = (byte) (dest >>> 16);
buf[i + 1] = (byte) (dest >>> 8);
buf[i] = (byte) dest;
}
}
i -= off;
pos += i;

View File

@@ -7,10 +7,10 @@
* This file has been put into the public domain.
* You can do whatever you want with this file.
*/
package org.tukaani.xz.simple;
public final class ARMThumb implements SimpleFilter {
private final boolean isEncoder;
private int pos;
@@ -23,7 +23,7 @@ public final class ARMThumb implements SimpleFilter {
int end = off + len - 4;
int i;
for (i = off; i <= end; i += 2) {
for (i = off; i <= end; i += 2)
if ((buf[i + 1] & 0xF8) == 0xF0 && (buf[i + 3] & 0xF8) == 0xF8) {
int src = ((buf[i + 1] & 0x07) << 19)
| ((buf[i] & 0xFF) << 11)
@@ -38,13 +38,12 @@ public final class ARMThumb implements SimpleFilter {
dest = src - (pos + i - off);
dest >>>= 1;
buf[i + 1] = (byte)(0xF0 | ((dest >>> 19) & 0x07));
buf[i] = (byte)(dest >>> 11);
buf[i + 3] = (byte)(0xF8 | ((dest >>> 8) & 0x07));
buf[i + 2] = (byte)dest;
buf[i + 1] = (byte) (0xF0 | ((dest >>> 19) & 0x07));
buf[i] = (byte) (dest >>> 11);
buf[i + 3] = (byte) (0xF8 | ((dest >>> 8) & 0x07));
buf[i + 2] = (byte) dest;
i += 2;
}
}
i -= off;
pos += i;

View File

@@ -7,15 +7,15 @@
* This file has been put into the public domain.
* You can do whatever you want with this file.
*/
package org.tukaani.xz.simple;
public final class IA64 implements SimpleFilter {
private static final int[] BRANCH_TABLE = {
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
4, 4, 6, 6, 0, 0, 7, 7,
4, 4, 0, 0, 4, 4, 0, 0 };
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
4, 4, 6, 6, 0, 0, 7, 7,
4, 4, 0, 0, 4, 4, 0, 0};
private final boolean isEncoder;
private int pos;
@@ -47,11 +47,11 @@ public final class IA64 implements SimpleFilter {
long instrNorm = instr >>> bitRes;
if (((instrNorm >>> 37) & 0x0F) != 0x05
|| ((instrNorm >>> 9) & 0x07) != 0x00)
|| ((instrNorm >>> 9) & 0x07) != 0x00)
continue;
int src = (int)((instrNorm >>> 13) & 0x0FFFFF);
src |= ((int)(instrNorm >>> 36) & 1) << 20;
int src = (int) ((instrNorm >>> 13) & 0x0FFFFF);
src |= ((int) (instrNorm >>> 36) & 1) << 20;
src <<= 4;
int dest;
@@ -70,7 +70,7 @@ public final class IA64 implements SimpleFilter {
instr |= instrNorm << bitRes;
for (int j = 0; j < 6; ++j)
buf[i + bytePos + j] = (byte)(instr >>> (8 * j));
buf[i + bytePos + j] = (byte) (instr >>> (8 * j));
}
}

View File

@@ -7,10 +7,10 @@
* This file has been put into the public domain.
* You can do whatever you want with this file.
*/
package org.tukaani.xz.simple;
public final class PowerPC implements SimpleFilter {
private final boolean isEncoder;
private int pos;
@@ -23,7 +23,7 @@ public final class PowerPC implements SimpleFilter {
int end = off + len - 4;
int i;
for (i = off; i <= end; i += 4) {
for (i = off; i <= end; i += 4)
if ((buf[i] & 0xFC) == 0x48 && (buf[i + 3] & 0x03) == 0x01) {
int src = ((buf[i] & 0x03) << 24)
| ((buf[i + 1] & 0xFF) << 16)
@@ -36,12 +36,11 @@ public final class PowerPC implements SimpleFilter {
else
dest = src - (pos + i - off);
buf[i] = (byte)(0x48 | ((dest >>> 24) & 0x03));
buf[i + 1] = (byte)(dest >>> 16);
buf[i + 2] = (byte)(dest >>> 8);
buf[i + 3] = (byte)((buf[i + 3] & 0x03) | dest);
buf[i] = (byte) (0x48 | ((dest >>> 24) & 0x03));
buf[i + 1] = (byte) (dest >>> 16);
buf[i + 2] = (byte) (dest >>> 8);
buf[i + 3] = (byte) ((buf[i + 3] & 0x03) | dest);
}
}
i -= off;
pos += i;

View File

@@ -7,10 +7,10 @@
* This file has been put into the public domain.
* You can do whatever you want with this file.
*/
package org.tukaani.xz.simple;
public final class SPARC implements SimpleFilter {
private final boolean isEncoder;
private int pos;
@@ -23,9 +23,9 @@ public final class SPARC implements SimpleFilter {
int end = off + len - 4;
int i;
for (i = off; i <= end; i += 4) {
for (i = off; i <= end; i += 4)
if ((buf[i] == 0x40 && (buf[i + 1] & 0xC0) == 0x00)
|| (buf[i] == 0x7F && (buf[i + 1] & 0xC0) == 0xC0)) {
|| (buf[i] == 0x7F && (buf[i + 1] & 0xC0) == 0xC0)) {
int src = ((buf[i] & 0xFF) << 24)
| ((buf[i + 1] & 0xFF) << 16)
| ((buf[i + 2] & 0xFF) << 8)
@@ -42,12 +42,11 @@ public final class SPARC implements SimpleFilter {
dest = (((0 - ((dest >>> 22) & 1)) << 22) & 0x3FFFFFFF)
| (dest & 0x3FFFFF) | 0x40000000;
buf[i] = (byte)(dest >>> 24);
buf[i + 1] = (byte)(dest >>> 16);
buf[i + 2] = (byte)(dest >>> 8);
buf[i + 3] = (byte)dest;
buf[i] = (byte) (dest >>> 24);
buf[i + 1] = (byte) (dest >>> 16);
buf[i + 2] = (byte) (dest >>> 8);
buf[i + 3] = (byte) dest;
}
}
i -= off;
pos += i;

View File

@@ -6,9 +6,9 @@
* This file has been put into the public domain.
* You can do whatever you want with this file.
*/
package org.tukaani.xz.simple;
public interface SimpleFilter {
int code(byte[] buf, int off, int len);
}

View File

@@ -7,12 +7,12 @@
* This file has been put into the public domain.
* You can do whatever you want with this file.
*/
package org.tukaani.xz.simple;
public final class X86 implements SimpleFilter {
private static final boolean[] MASK_TO_ALLOWED_STATUS
= {true, true, true, false, true, false, false, false};
= {true, true, true, false, true, false, false, false};
private static final int[] MASK_TO_BIT_NUMBER = {0, 1, 2, 2, 3, 3, 3, 3};
@@ -40,18 +40,17 @@ public final class X86 implements SimpleFilter {
continue;
prevPos = i - prevPos;
if ((prevPos & ~3) != 0) { // (unsigned)prevPos > 3
if ((prevPos & ~3) != 0) // (unsigned)prevPos > 3
prevMask = 0;
} else {
else {
prevMask = (prevMask << (prevPos - 1)) & 7;
if (prevMask != 0) {
if (prevMask != 0)
if (!MASK_TO_ALLOWED_STATUS[prevMask] || test86MSByte(
buf[i + 4 - MASK_TO_BIT_NUMBER[prevMask]])) {
buf[i + 4 - MASK_TO_BIT_NUMBER[prevMask]])) {
prevPos = i;
prevMask = (prevMask << 1) | 1;
continue;
}
}
}
prevPos = i;
@@ -72,20 +71,19 @@ public final class X86 implements SimpleFilter {
break;
int index = MASK_TO_BIT_NUMBER[prevMask] * 8;
if (!test86MSByte((byte)(dest >>> (24 - index))))
if (!test86MSByte((byte) (dest >>> (24 - index))))
break;
src = dest ^ ((1 << (32 - index)) - 1);
}
buf[i + 1] = (byte)dest;
buf[i + 2] = (byte)(dest >>> 8);
buf[i + 3] = (byte)(dest >>> 16);
buf[i + 4] = (byte)(~(((dest >>> 24) & 1) - 1));
buf[i + 1] = (byte) dest;
buf[i + 2] = (byte) (dest >>> 8);
buf[i + 3] = (byte) (dest >>> 16);
buf[i + 4] = (byte) (~(((dest >>> 24) & 1) - 1));
i += 4;
} else {
} else
prevMask = (prevMask << 1) | 1;
}
}
prevPos = i - prevPos;