Tôi đang làm việc trên một triển khai JVM nghiệp dư và tôi đang cố gắng đảm bảo rằng tôi có phạm vi kiểm tra cho tất cả các opcodes trong thông số kỹ thuật. Tôi đã nhận được nó xuống đến vài cuối cùng, nhưng nop
và swap
đã được eluding tôi. Ví dụ, đây là một chức năng đơn giản mà có thể sử dụng swap
:Mã Java nào sẽ buộc javac 1.6 sử dụng opcodes 'hoán đổi' và 'nop'?
static int do_swap() {
int a = 56;
int b = 32;
return b%a;
}
Nhưng bytecode sản xuất bởi javac 1.6
tránh trao đổi thay vì lưu trữ địa phương:
static int do_swap();
Code:
0: bipush 56
2: istore_0
3: bipush 32
5: istore_1
6: iload_1
7: iload_0
8: irem
9: ireturn
Bất kỳ ý tưởng?
Tôi nghĩ rằng trình biên dịch Krakatau sẽ hữu ích hơn trong việc tạo các trường hợp kiểm tra JVM, vì nó hỗ trợ các tính năng tối nghĩa hơn của định dạng lớp mà Jasmin không làm. (Tiết lộ tôi đã viết nó). Nhưng đối với một cái gì đó đơn giản như thế này, Jasmin là đủ tốt. – Antimony