~ubuntu-branches/ubuntu/precise/gnuradio/precise

« back to all changes in this revision

Viewing changes to gnuradio-core/src/lib/filter/float_dotprod_sse64.S

  • Committer: Bazaar Package Importer
  • Author(s): Kamal Mostafa
  • Date: 2010-03-13 07:46:01 UTC
  • mfrom: (2.1.2 sid)
  • Revision ID: james.westby@ubuntu.com-20100313074601-zjsa893a87bozyh7
Tags: 3.2.2.dfsg-1ubuntu1
* Fix build for Ubuntu lucid (LP: #260406)
  - add binary package dep for libusrp0, libusrp2-0: adduser
  - debian/rules clean: remove pre-built Qt moc files

Show diffs side-by-side

added added

removed removed

Lines of Context:
77
77
        jmp     .L1_test
78
78
 
79
79
        .p2align 4
80
 
.loop1: 
 
80
.Loop1: 
81
81
        movaps  (%rsi), %xmm0
82
82
        mulps   (%rdi), %xmm0
83
83
        add     $0x10, %rdi
85
85
        addps   %xmm0, %xmm4
86
86
.L1_test:       
87
87
        dec     %rax
88
 
        jge     .loop1
 
88
        jge     .Loop1
89
89
 
90
90
        
91
91
        # set up for primary loop which is unrolled 4 times
94
94
        movaps  %xmm5, %xmm7 
95
95
 
96
96
        shr     $2, %rdx                # n_4_float_blocks / 4
97
 
        je      .cleanup                # if zero, take short path
 
97
        je      .Lcleanup               # if zero, take short path
98
98
 
99
99
        # finish setup and loop priming
100
100
 
107
107
        # hence enter loop at top
108
108
 
109
109
        .p2align 4
110
 
.loop2:
 
110
.Loop2:
111
111
        mulps   (%rdi), %xmm0
112
112
        addps   %xmm2, %xmm6
113
113
        movaps  0x20(%rsi), %xmm2
127
127
        add     $0x40, %rdi
128
128
        add     $0x40, %rsi
129
129
        dec     %rdx
130
 
        jne     .loop2
 
130
        jne     .Loop2
131
131
 
132
132
        # OK, now we've done with all the multiplies, but
133
133
        # we still need to handle the unaccumulated
147
147
        # to compute a "horizontal add" across xmm4.  
148
148
        # This is a fairly nasty operation...
149
149
        
150
 
.cleanup:                               # xmm4 = d1 d2 d3 d4
 
150
.Lcleanup:                              # xmm4 = d1 d2 d3 d4
151
151
        xorps   %xmm0, %xmm0            # xmm0 = 0 0 0 0  (may be unnecessary)
152
152
        movhlps %xmm4, %xmm0            # xmm0 = 0 0 d1 d2
153
153
        addps   %xmm4, %xmm0            # xmm0 = d1 d2 d1+d3 d2+d4
159
159
 
160
160
FUNC_TAIL(float_dotprod_sse)
161
161
        .ident  "Hand coded x86_64 SSE assembly"
 
162
 
 
163
#if defined(__linux__) && defined(__ELF__)
 
164
.section .note.GNU-stack,"",%progbits
 
165
#endif