| test.cpp
template<class T> T add(T a,T b) { return a+b; }
template int add(int,int);
template char add(char,char);
template double add(double,double);
build.sh
#!/bin/sh
g++ -O2 -S -masm=intel test.cpp && \
cat test.s | c++filt > test.asm && \
cat test.asm | grep @function
output
.type int add<int>(int, int), @function
.type char add<char>(char, char), @function
.type double add<double>(double, double), @function
test.asm
.file "test.cpp"
.intel_syntax noprefix
.text
.section .text._Z3addIiET_S0_S0_,"axG",@progbits,int add<int>(int, int),comdat
.p2align 4
.weak int add<int>(int, int)
.type int add<int>(int, int), @function
int add<int>(int, int):
.LFB1:
.cfi_startproc
endbr64
lea eax, [rdi+rsi]
ret
.cfi_endproc
.LFE1:
.size int add<int>(int, int), .-int add<int>(int, int)
.section .text._Z3addIcET_S0_S0_,"axG",@progbits,char add<char>(char, char),comdat
.p2align 4
.weak char add<char>(char, char)
.type char add<char>(char, char), @function
char add<char>(char, char):
.LFB2:
.cfi_startproc
endbr64
lea eax, [rsi+rdi]
ret
.cfi_endproc
.LFE2:
.size char add<char>(char, char), .-char add<char>(char, char)
.section .text._Z3addIdET_S0_S0_,"axG",@progbits,double add<double>(double, double),comdat
.p2align 4
.weak double add<double>(double, double)
.type double add<double>(double, double), @function
double add<double>(double, double):
.LFB3:
.cfi_startproc
endbr64
addsd xmm0, xmm1
ret
.cfi_endproc
.LFE3:
.size double add<double>(double, double), .-double add<double>(double, double)
.ident "GCC: (Ubuntu 9.3.0-17ubuntu1~20.04) 9.3.0"
.section .note.GNU-stack,"",@progbits
.section .note.gnu.property,"a"
.align 8
.long 1f - 0f
.long 4f - 1f
.long 5
0:
.string "GNU"
1:
.align 8
.long 0xc0000002
.long 3f - 2f
2:
.long 0x3
3:
.align 8
4:
|