--- rpl/src/instructions_r3.c 2013/02/27 17:11:44 1.49 +++ rpl/src/instructions_r3.c 2013/03/16 11:31:41 1.50 @@ -410,25 +410,67 @@ instruction_rnrm(struct_processus *s_eta if ((*s_objet_argument).type == VIN) { - if ((s_objet_resultat = allocation(s_etat_processus, INT)) == NULL) + depassement = d_faux; + + for(i = 0; i < (*((struct_vecteur *) (*s_objet_argument).objet)).taille; + i++) { - (*s_etat_processus).erreur_systeme = d_es_allocation_memoire; - return; + if (((integer8 *) (*((struct_vecteur *) (*s_objet_argument) + .objet)).tableau)[i] == INT64_MIN) + { + depassement = d_vrai; + break; + } } - (*((integer8 *) (*s_objet_resultat).objet)) = abs(((integer8 *) - (*((struct_vecteur *) (*s_objet_argument).objet)).tableau)[0]); + if (depassement == d_faux) + { + if ((s_objet_resultat = allocation(s_etat_processus, INT)) == NULL) + { + (*s_etat_processus).erreur_systeme = d_es_allocation_memoire; + return; + } - for(i = 1; i < (*((struct_vecteur *) (*s_objet_argument).objet)).taille; - i++) + (*((integer8 *) (*s_objet_resultat).objet)) = abs(((integer8 *) + (*((struct_vecteur *) (*s_objet_argument).objet)) + .tableau)[0]); + + for(i = 1; i < (*((struct_vecteur *) (*s_objet_argument).objet)) + .taille; i++) + { + if (abs(((integer8 *) (*((struct_vecteur *) (*s_objet_argument) + .objet)).tableau)[i]) > (*((integer8 *) + (*s_objet_resultat).objet))) + { + (*((integer8 *) (*s_objet_resultat).objet)) = + abs(((integer8 *) (*((struct_vecteur *) + (*s_objet_argument).objet)).tableau)[i]); + } + } + } + else { - if (abs(((integer8 *) (*((struct_vecteur *) (*s_objet_argument) - .objet)).tableau)[i]) > (*((integer8 *) - (*s_objet_resultat).objet))) + if ((s_objet_resultat = allocation(s_etat_processus, REL)) == NULL) { - (*((integer8 *) (*s_objet_resultat).objet)) = - abs(((integer8 *) (*((struct_vecteur *) - (*s_objet_argument).objet)).tableau)[i]); + (*s_etat_processus).erreur_systeme = d_es_allocation_memoire; + return; + } + + (*((real8 *) (*s_objet_resultat).objet)) = abs((real8) ((integer8 *) + (*((struct_vecteur *) (*s_objet_argument).objet)) + .tableau)[0]); + + for(i = 1; i < (*((struct_vecteur *) (*s_objet_argument).objet)) + .taille; i++) + { + if (abs((real8) ((integer8 *) (*((struct_vecteur *) + (*s_objet_argument).objet)).tableau)[i]) > (*((real8 *) + (*s_objet_resultat).objet))) + { + (*((real8 *) (*s_objet_resultat).objet)) = + abs((real8) ((integer8 *) (*((struct_vecteur *) + (*s_objet_argument).objet)).tableau)[i]); + } } } } @@ -501,6 +543,13 @@ instruction_rnrm(struct_processus *s_eta for(j = 0; j < (*((struct_matrice *) (*s_objet_argument).objet)) .nombre_colonnes; j++) { + if (((integer8 **) (*((struct_matrice *) (*s_objet_argument).objet)) + .tableau)[0][j] == INT64_MIN) + { + depassement = d_vrai; + break; + } + entier_courant = abs(((integer8 **) (*((struct_matrice *) (*s_objet_argument).objet)) .tableau)[0][j]); @@ -525,6 +574,14 @@ instruction_rnrm(struct_processus *s_eta for(j = 0; j < (*((struct_matrice *) (*s_objet_argument).objet)) .nombre_colonnes; j++) { + if (((integer8 **) (*((struct_matrice *) + (*s_objet_argument).objet)).tableau)[i][j] + == INT64_MIN) + { + depassement = d_vrai; + break; + } + entier_courant = abs(((integer8 **) (*((struct_matrice *) (*s_objet_argument).objet)).tableau)[i][j]);