Skip to content

Commit b99cd3b

Browse files
committed
Completadas op logicas de int
1 parent a21c01d commit b99cd3b

File tree

2 files changed

+18
-0
lines changed

2 files changed

+18
-0
lines changed

jvm.c

+16
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@ operation optable[N_OPS] = {
2222
[OP_iushr] = iushr,
2323
[OP_iand] = iand,
2424
[OP_ior] = ior,
25+
[OP_irem] = irem,
26+
[OP_ineg] = ineg,
2527
[OP_return] = return_func,
2628
[OP_ireturn] = ireturn,
2729
[OP_dreturn] = dreturn,
@@ -564,6 +566,20 @@ void ior(Frame *f, uint32_t a0, uint32_t a1) {
564566
push_stack(f, (v2) | (v1));
565567
}
566568

569+
void ineg(Frame *f, uint32_t a0, uint32_t a1) {
570+
int32_t d1 = pop_stack(f);
571+
int32_t result = -d1;
572+
push_stack(f, result);
573+
}
574+
575+
void irem(Frame *f, uint32_t a0, uint32_t a1) {
576+
int32_t d1 = pop_stack(f);
577+
int32_t d2 = pop_stack(f);
578+
int q = d2/d1;
579+
int32_t result = d2 - (d1 * q);
580+
push_stack(f, result);
581+
}
582+
567583
void ishr(Frame *f, uint32_t a0, uint32_t a1) {
568584
int32_t v1 = pop_stack(f);
569585
int32_t v2 = pop_stack(f);

jvm.h

+2
Original file line numberDiff line numberDiff line change
@@ -223,6 +223,8 @@ void ior(Frame *f, uint32_t a0, uint32_t a1);
223223
void ishr(Frame *f, uint32_t a0, uint32_t a1);
224224
void ishl(Frame *f, uint32_t a0, uint32_t a1);
225225
void iushr(Frame *f, uint32_t a0, uint32_t a1);
226+
void irem(Frame *f, uint32_t a0, uint32_t a1);
227+
void ineg(Frame *f, uint32_t a0, uint32_t a1);
226228

227229
void return_func(Frame *f, uint32_t a0, uint32_t a1);
228230
void ireturn(Frame *f, uint32_t a0, uint32_t a1);

0 commit comments

Comments
 (0)