~ubuntu-branches/ubuntu/precise/linux-lowlatency/precise

« back to all changes in this revision

Viewing changes to arch/powerpc/math-emu/fmadds.c

  • Committer: Package Import Robot
  • Author(s): Alessio Igor Bogani
  • Date: 2011-10-26 11:13:05 UTC
  • Revision ID: package-import@ubuntu.com-20111026111305-tz023xykf0i6eosh
Tags: upstream-3.2.0
ImportĀ upstreamĀ versionĀ 3.2.0

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#include <linux/types.h>
 
2
#include <linux/errno.h>
 
3
#include <asm/uaccess.h>
 
4
 
 
5
#include <asm/sfp-machine.h>
 
6
#include <math-emu/soft-fp.h>
 
7
#include <math-emu/double.h>
 
8
#include <math-emu/single.h>
 
9
 
 
10
int
 
11
fmadds(void *frD, void *frA, void *frB, void *frC)
 
12
{
 
13
        FP_DECL_D(R);
 
14
        FP_DECL_D(A);
 
15
        FP_DECL_D(B);
 
16
        FP_DECL_D(C);
 
17
        FP_DECL_D(T);
 
18
        FP_DECL_EX;
 
19
 
 
20
#ifdef DEBUG
 
21
        printk("%s: %p %p %p %p\n", __func__, frD, frA, frB, frC);
 
22
#endif
 
23
 
 
24
        FP_UNPACK_DP(A, frA);
 
25
        FP_UNPACK_DP(B, frB);
 
26
        FP_UNPACK_DP(C, frC);
 
27
 
 
28
#ifdef DEBUG
 
29
        printk("A: %ld %lu %lu %ld (%ld)\n", A_s, A_f1, A_f0, A_e, A_c);
 
30
        printk("B: %ld %lu %lu %ld (%ld)\n", B_s, B_f1, B_f0, B_e, B_c);
 
31
        printk("C: %ld %lu %lu %ld (%ld)\n", C_s, C_f1, C_f0, C_e, C_c);
 
32
#endif
 
33
 
 
34
        if ((A_c == FP_CLS_INF && C_c == FP_CLS_ZERO) ||
 
35
            (A_c == FP_CLS_ZERO && C_c == FP_CLS_INF))
 
36
                FP_SET_EXCEPTION(EFLAG_VXIMZ);
 
37
 
 
38
        FP_MUL_D(T, A, C);
 
39
 
 
40
        if (T_s != B_s && T_c == FP_CLS_INF && B_c == FP_CLS_INF)
 
41
                FP_SET_EXCEPTION(EFLAG_VXISI);
 
42
 
 
43
        FP_ADD_D(R, T, B);
 
44
 
 
45
#ifdef DEBUG
 
46
        printk("D: %ld %lu %lu %ld (%ld)\n", R_s, R_f1, R_f0, R_e, R_c);
 
47
#endif
 
48
 
 
49
        __FP_PACK_DS(frD, R);
 
50
 
 
51
        return FP_CUR_EXCEPTIONS;
 
52
}