#include "spvm_native.h"
#include <string.h>
int32_t SPVM__MyOpenMP__sum_vec_int(SPVM_ENV* env, SPVM_VALUE* stack) {
void
* obj_nums1 = stack[0].oval;
if
(obj_nums1 == NULL) {
return
env->die(env, stack,
"First argument must be not null"
,
"SPVM/MyOpenMP.c"
, __LINE__);
}
int32_t* nums1 = env->get_elems_int(env, stack, obj_nums1);
void
* obj_nums2 = stack[1].oval;
if
(obj_nums2 == NULL) {
return
env->die(env, stack,
"First argument must be not null"
,
"SPVM/MyOpenMP.c"
, __LINE__);
}
int32_t* nums2 = env->get_elems_int(env, stack, obj_nums2);
int32_t length = env->length(env, stack, obj_nums1);
void
* obj_nums3 = env->new_int_array(env, stack, length);
int32_t* nums3 = env->get_elems_int(env, stack, obj_nums3);
int32_t i;
#pragma omp parallel for
for
(i = 0; i < length; i++) {
nums3[i] = nums1[i] + nums2[i];
}
stack[0].oval = obj_nums3;
return
0;
}