[PATCH 3/6 V2] [pcm_dmix assembly] fix the interface for safety
frederic.recoules at univ-grenoble-alpes.fr
frederic.recoules at univ-grenoble-alpes.fr
Wed Apr 29 21:10:36 CEST 2020
From: Frédéric Recoules <frederic.recoules at orange.fr>
- move 'size' and 'old_ebx' in the output section
since they are clobbered;
- add the "memory" clobber since input pointers
are dereferenced;
- (minor) add the "cc" clobber since flags are
clobbered.
Note: produce exactly the same binary output.
Signed-off-by: Frédéric Recoules <frederic.recoules at orange.fr>
---
src/pcm/pcm_dmix_i386.h | 45 +++++++++++++++++----------------------
src/pcm/pcm_dmix_x86_64.h | 27 +++++++++++------------
2 files changed, 32 insertions(+), 40 deletions(-)
diff --git a/src/pcm/pcm_dmix_i386.h b/src/pcm/pcm_dmix_i386.h
index e816d5e0..3ea0737d 100644
--- a/src/pcm/pcm_dmix_i386.h
+++ b/src/pcm/pcm_dmix_i386.h
@@ -142,12 +142,11 @@ static void MIX_AREAS_16(unsigned int size,
"7:"
"\tmovl %[old_ebx], %%ebx\n" /* ebx is GOT pointer (-fPIC) */
- : /* no output regs */
- : [size] "m" (size),
- [dst] "m" (dst), [src] "m" (src), [sum] "m" (sum),
+ : [size] "+m" (size), [old_ebx] "=m" (old_ebx)
+ : [dst] "m" (dst), [src] "m" (src), [sum] "m" (sum),
[dst_step] "m" (dst_step), [src_step] "m" (src_step),
- [sum_step] "m" (sum_step), [old_ebx] "m" (old_ebx)
- : "esi", "edi", "edx", "ecx", "eax"
+ [sum_step] "m" (sum_step)
+ : "esi", "edi", "edx", "ecx", "eax", "memory", "cc"
);
}
@@ -233,12 +232,11 @@ static void MIX_AREAS_16_MMX(unsigned int size,
"5:"
"\tmovl %[old_ebx], %%ebx\n" /* ebx is GOT pointer (-fPIC) */
- : /* no output regs */
- : [size] "m" (size),
- [dst] "m" (dst), [src] "m" (src), [sum] "m" (sum),
+ : [size] "+m" (size), [old_ebx] "=m" (old_ebx)
+ : [dst] "m" (dst), [src] "m" (src), [sum] "m" (sum),
[dst_step] "m" (dst_step), [src_step] "m" (src_step),
- [sum_step] "m" (sum_step), [old_ebx] "m" (old_ebx)
- : "esi", "edi", "edx", "ecx", "eax"
+ [sum_step] "m" (sum_step)
+ : "esi", "edi", "edx", "ecx", "eax", "memory", "cc"
);
}
@@ -347,12 +345,11 @@ static void MIX_AREAS_32(unsigned int size,
"6:"
"\tmovl %[old_ebx], %%ebx\n" /* ebx is GOT pointer (-fPIC) */
- : /* no output regs */
- : [size] "m" (size),
- [dst] "m" (dst), [src] "m" (src), [sum] "m" (sum),
+ : [size] "+m" (size), [old_ebx] "=m" (old_ebx)
+ : [dst] "m" (dst), [src] "m" (src), [sum] "m" (sum),
[dst_step] "m" (dst_step), [src_step] "m" (src_step),
- [sum_step] "m" (sum_step), [old_ebx] "m" (old_ebx)
- : "esi", "edi", "edx", "ecx", "eax"
+ [sum_step] "m" (sum_step)
+ : "esi", "edi", "edx", "ecx", "eax", "memory", "cc"
);
}
@@ -454,12 +451,11 @@ static void MIX_AREAS_24(unsigned int size,
"6:"
"\tmovl %[old_ebx], %%ebx\n" /* ebx is GOT pointer (-fPIC) */
- : /* no output regs */
- : [size] "m" (size),
- [dst] "m" (dst), [src] "m" (src), [sum] "m" (sum),
+ : [size] "+m" (size), [old_ebx] "=m" (old_ebx)
+ : [dst] "m" (dst), [src] "m" (src), [sum] "m" (sum),
[dst_step] "m" (dst_step), [src_step] "m" (src_step),
- [sum_step] "m" (sum_step), [old_ebx] "m" (old_ebx)
- : "esi", "edi", "edx", "ecx", "eax"
+ [sum_step] "m" (sum_step)
+ : "esi", "edi", "edx", "ecx", "eax", "memory", "cc"
);
}
@@ -554,11 +550,10 @@ static void MIX_AREAS_24_CMOV(unsigned int size,
"6:"
"\tmovl %[old_ebx], %%ebx\n" /* ebx is GOT pointer (-fPIC) */
- : /* no output regs */
- : [size] "m" (size),
- [dst] "m" (dst), [src] "m" (src), [sum] "m" (sum),
+ : [size] "+m" (size), [old_ebx] "=m" (old_ebx)
+ : [dst] "m" (dst), [src] "m" (src), [sum] "m" (sum),
[dst_step] "m" (dst_step), [src_step] "m" (src_step),
- [sum_step] "m" (sum_step), [old_ebx] "m" (old_ebx)
- : "esi", "edi", "edx", "ecx", "eax"
+ [sum_step] "m" (sum_step)
+ : "esi", "edi", "edx", "ecx", "eax", "memory", "cc"
);
}
diff --git a/src/pcm/pcm_dmix_x86_64.h b/src/pcm/pcm_dmix_x86_64.h
index dc433b35..7f711547 100644
--- a/src/pcm/pcm_dmix_x86_64.h
+++ b/src/pcm/pcm_dmix_x86_64.h
@@ -114,12 +114,11 @@ static void MIX_AREAS_16(unsigned int size,
"\temms\n"
"\tmovq %[old_rbx], %%rbx\n"
- : /* no output regs */
- : [size] "m" (size),
- [dst] "m" (dst), [src] "m" (src), [sum] "m" (sum),
+ : [size] "+m" (size), [old_rbx] "=m" (old_rbx)
+ : [dst] "m" (dst), [src] "m" (src), [sum] "m" (sum),
[dst_step] "m" (dst_step), [src_step] "m" (src_step),
- [sum_step] "m" (sum_step), [old_rbx] "m" (old_rbx)
- : "rsi", "rdi", "edx", "ecx", "eax"
+ [sum_step] "m" (sum_step)
+ : "rsi", "rdi", "edx", "ecx", "eax", "memory", "cc"
);
}
@@ -230,12 +229,11 @@ static void MIX_AREAS_32(unsigned int size,
"6:"
"\tmovq %[old_rbx], %%rbx\n"
- : /* no output regs */
- : [size] "m" (size),
- [dst] "m" (dst), [src] "m" (src), [sum] "m" (sum),
+ : [size] "+m" (size), [old_rbx] "=m" (old_rbx)
+ : [dst] "m" (dst), [src] "m" (src), [sum] "m" (sum),
[dst_step] "m" (dst_step), [src_step] "m" (src_step),
- [sum_step] "m" (sum_step), [old_rbx] "m" (old_rbx)
- : "rsi", "rdi", "edx", "ecx", "eax"
+ [sum_step] "m" (sum_step)
+ : "rsi", "rdi", "edx", "ecx", "eax", "memory", "cc"
);
}
@@ -334,11 +332,10 @@ static void MIX_AREAS_24(unsigned int size,
"6:"
"\tmovq %[old_rbx], %%rbx\n"
- : /* no output regs */
- : [size] "m" (size),
- [dst] "m" (dst), [src] "m" (src), [sum] "m" (sum),
+ : [size] "+m" (size), [old_rbx] "=m" (old_rbx)
+ : [dst] "m" (dst), [src] "m" (src), [sum] "m" (sum),
[dst_step] "m" (dst_step), [src_step] "m" (src_step),
- [sum_step] "m" (sum_step), [old_rbx] "m" (old_rbx)
- : "rsi", "rdi", "edx", "ecx", "eax"
+ [sum_step] "m" (sum_step)
+ : "rsi", "rdi", "edx", "ecx", "eax", "memory", "cc"
);
}
--
2.17.1
More information about the Alsa-devel
mailing list