OpenCores
URL https://opencores.org/ocsvn/1664/1664/trunk

Subversion Repositories 1664

[/] [1664/] [trunk/] [c/] [cpu_1664/] [cpu_1664_opera__div.c] - Blame information for rev 2

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 mrdmkg
#include "cpu_1664.h"
2
 
3
void cpu_1664_opera__div(struct cpu_1664 *cpu, n1 bait)
4
{
5
 cpu->opera_sicle=cpu_1664_sicle_opera_div;
6
 cpu_1664_sinia_t masima=cpu->sinia[bait&((1<<cpu_1664_bitio_rd)-1)];
7
 cpu_1664_sinia_t minima=cpu->sinia[bait>>cpu_1664_bitio_rd];
8
 cpu_1664_sinia_t desloca_masima;
9
 cpu_1664_sinia_t desloca_minima;
10
 cpu_1664_sinia_t masca;
11
 
12
 if(minima==0)
13
 {
14
  cpu_1664_eseta(cpu, cpu_1664_eseta_div_zero);
15
  return;
16
 }
17
 else
18
 {
19
  nN i;
20
  for(masca=-1, i=0;((masima&masca)!=0);i++)
21
  {
22
   masca<<=1;
23
  }
24
  desloca_masima=(sizeof(cpu_1664_sinia_t)*8)-i;
25
 
26
  for(masca=1, i=0; ((minima&masca)==0); i++)
27
  {
28
   masca<<=1;
29
  }
30
  desloca_minima=i;
31
 
32
//x86-64
33
  for(i=desloca_masima; i>31; i-=31)
34
  {
35
   masima<<=31;
36
  }
37
  masima<<=i;
38
 
39
  for(i=desloca_minima; i>31; i-=31)
40
  {
41
   minima>>=31;
42
  }
43
  minima>>=i;
44
 
45
  cpu_1664_sinia_t loca_div;
46
  cpu_1664_sinia_t div=masima/minima;
47
 
48
  for(masca=-1, i=0; ((div&masca)!=0); i++)
49
  {
50
   masca<<=1;
51
  }
52
  loca_div=(sizeof(cpu_1664_sinia_t)*8)-i;
53
 
54
  for(i=loca_div; i>31; i-=31)
55
  {
56
   div<<=31;
57
  }
58
  div<<=i;
59
 
60
  cpu->sinia[bait&((1<<cpu_1664_bitio_rd)-1)]=div;
61
  cpu->sinia[cpu_1664_sinia_desloca]+=loca_div+desloca_minima+desloca_masima;
62
 }
63
}

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.