SlideShare a Scribd company logo
QEMU’s recompilation
engine
Donnerstag, 15. August 13
About Me
• Alexander Graf
• Freelance developer for SUSE and Freescale
• KVM and Qemu developer
• Server class PowerPC KVM port
• S390x Qemu guest support
• x86 Mac OS X in KVM
• Nested SVM
• ...
Donnerstag, 15. August 13
What is Emulation
Donnerstag, 15. August 13
Donnerstag, 15. August 13
Donnerstag, 15. August 13
Donnerstag, 15. August 13
Donnerstag, 15. August 13
Donnerstag, 15. August 13
Donnerstag, 15. August 13
Donnerstag, 15. August 13
CPU Instructions
Donnerstag, 15. August 13
CPU Instructions
Register Value
r0
r1
...
0
0
0
Donnerstag, 15. August 13
CPU Instructions
Register Value
r0
r1
...
0
0
...
38 21 00 01 !addi r1,r1,1
code:
38 20 00 01 !li r1,1
7c 20 0b 78 !mr r0,r1
Donnerstag, 15. August 13
CPU Instructions
Register Value
r0
r1
...
0
0
...
38 21 00 01 !addi r1,r1,1
code:
38 20 00 01 !li r1,1
7c 20 0b 78 !mr r0,r1
Donnerstag, 15. August 13
CPU Instructions
38 21 00 01 !addi r1,r1,1
code:
38 20 00 01 !li r1,1
7c 20 0b 78 !mr r0,r1
Register Value
r0
r1
...
0
...
0
Donnerstag, 15. August 13
CPU Instructions
38 21 00 01 !addi r1,r1,1
code:
38 20 00 01 !li r1,1
7c 20 0b 78 !mr r0,r1
Register Value
r0
r1
...
0
...
10
Donnerstag, 15. August 13
CPU Instructions
38 21 00 01 !addi r1,r1,1
code:
38 20 00 01 !li r1,1
7c 20 0b 78 !mr r0,r1
Register Value
r0
r1
...
0
...
1
Donnerstag, 15. August 13
CPU Instructions
Register Value
r0
r1
...
0
1
...
38 21 00 01 !addi r1,r1,1
code:
38 20 00 01 !li r1,1
7c 20 0b 78 !mr r0,r1
Donnerstag, 15. August 13
CPU Instructions
Register Value
r0
r1
...
0
1
...
38 21 00 01 !addi r1,r1,1
code:
38 20 00 01 !li r1,1
7c 20 0b 78 !mr r0,r1
Donnerstag, 15. August 13
CPU Instructions
Register Value
r0
r1
...
0
1
...
38 21 00 01 !addi r1,r1,1
code:
38 20 00 01 !li r1,1
7c 20 0b 78 !mr r0,r1
Donnerstag, 15. August 13
CPU Instructions
Register Value
r0
r1
...
1
...
38 21 00 01 !addi r1,r1,1
code:
38 20 00 01 !li r1,1
7c 20 0b 78 !mr r0,r1
0
Donnerstag, 15. August 13
CPU Instructions
Register Value
r0
r1
...
1
...
38 21 00 01 !addi r1,r1,1
code:
38 20 00 01 !li r1,1
7c 20 0b 78 !mr r0,r1
1
0
Donnerstag, 15. August 13
CPU Instructions
Register Value
r0
r1
...
1
...
38 21 00 01 !addi r1,r1,1
code:
38 20 00 01 !li r1,1
7c 20 0b 78 !mr r0,r1
1
Donnerstag, 15. August 13
CPU Instructions
Register Value
r0
r1
...
1
1
...
38 21 00 01 !addi r1,r1,1
code:
38 20 00 01 !li r1,1
7c 20 0b 78 !mr r0,r1
Donnerstag, 15. August 13
CPU Instructions
Register Value
r0
r1
...
1
1
...
code:
38 20 00 01 !li r1,1
7c 20 0b 78 !mr r0,r1
38 21 00 01 !addi r1,r1,1
Donnerstag, 15. August 13
CPU Instructions
Register Value
r0
r1
...
1
1
...
code:
38 20 00 01 !li r1,1
7c 20 0b 78 !mr r0,r1
38 21 00 01 !addi r1,r1,1
1
Donnerstag, 15. August 13
CPU Instructions
Register Value
r0
r1
...
1
1
...
code:
38 20 00 01 !li r1,1
7c 20 0b 78 !mr r0,r1
38 21 00 01 !addi r1,r1,1
1 + 1 =
Donnerstag, 15. August 13
CPU Instructions
Register Value
r0
r1
...
1
...
38 21 00 01 !addi r1,r1,1
code:
38 20 00 01 !li r1,1
7c 20 0b 78 !mr r0,r1
1 + 1 = 21
Donnerstag, 15. August 13
CPU Instructions
Register Value
r0
r1
...
1
...
38 21 00 01 !addi r1,r1,1
code:
38 20 00 01 !li r1,1
7c 20 0b 78 !mr r0,r1
2
Donnerstag, 15. August 13
CPU Instructions
Register Value
r0
r1
...
1
2
...
38 21 00 01 !addi r1,r1,1
code:
38 20 00 01 !li r1,1
7c 20 0b 78 !mr r0,r1
Donnerstag, 15. August 13
Register Value
r0
r1
...
1
2
...
38 21 00 01 !addi r1,r1,1
code:
38 20 00 01 !li r1,1
7c 20 0b 78 !mr r0,r1
Different ISAs
Donnerstag, 15. August 13
Different ISAs
Register Value
r0
r1
...
1
2
...
38 21 00 01 !addi r1,r1,1
code:
38 20 00 01 !li r1,1
7c 20 0b 78 !mr r0,r1
Register Value
eax
ebx
...
0
0
...
83 c3 01 ! add $0x1,%ebx
code:
bb 01 00 00 00! mov $0x1,%ebx
89 d8 ! mov %ebx,%eax
Donnerstag, 15. August 13
Different ISAs
Register Value
r0
r1
...
1
2
...
38 21 00 01 !addi r1,r1,1
code:
38 20 00 01 !li r1,1
7c 20 0b 78 !mr r0,r1
Register Value
eax
ebx
...
0
0
...
83 c3 01 ! add $0x1,%ebx
code:
bb 01 00 00 00! mov $0x1,%ebx
89 d8 ! mov %ebx,%eax
Donnerstag, 15. August 13
Different ISAs
Register Value
r0
r1
...
1
2
...
38 21 00 01 !addi r1,r1,1
code:
38 20 00 01 !li r1,1
7c 20 0b 78 !mr r0,r1
Register Value
eax
ebx
...
0
1
...
83 c3 01 ! add $0x1,%ebx
code:
bb 01 00 00 00! mov $0x1,%ebx
89 d8 ! mov %ebx,%eax
Donnerstag, 15. August 13
Different ISAs
Register Value
r0
r1
...
1
2
...
38 21 00 01 !addi r1,r1,1
code:
38 20 00 01 !li r1,1
7c 20 0b 78 !mr r0,r1
Register Value
eax
ebx
...
1
1
...
83 c3 01 ! add $0x1,%ebx
code:
bb 01 00 00 00! mov $0x1,%ebx
89 d8 ! mov %ebx,%eax
Donnerstag, 15. August 13
Different ISAs
Register Value
r0
r1
...
1
2
...
38 21 00 01 !addi r1,r1,1
code:
38 20 00 01 !li r1,1
7c 20 0b 78 !mr r0,r1
Register Value
eax
ebx
...
1
2
...
83 c3 01 ! add $0x1,%ebx
code:
bb 01 00 00 00! mov $0x1,%ebx
89 d8 ! mov %ebx,%eax
Donnerstag, 15. August 13
Different ISAs
Register Value
r0
r1
...
1
2
...
38 21 00 01 !addi r1,r1,1
code:
38 20 00 01 !li r1,1
7c 20 0b 78 !mr r0,r1
Register Value
eax
ebx
...
1
2
...
83 c3 01 ! add $0x1,%ebx
code:
bb 01 00 00 00! mov $0x1,%ebx
89 d8 ! mov %ebx,%eax
Donnerstag, 15. August 13
Converting code
Donnerstag, 15. August 13
Converting code
Donnerstag, 15. August 13
Converting code
Donnerstag, 15. August 13
Converting code
Donnerstag, 15. August 13
Converting code
Donnerstag, 15. August 13
Converting code
Donnerstag, 15. August 13
Converting code
Donnerstag, 15. August 13
Converting code
Donnerstag, 15. August 13
Converting code
Donnerstag, 15. August 13
Converting code
Donnerstag, 15. August 13
TCG
TCG
Donnerstag, 15. August 13
TCG
TCG
Donnerstag, 15. August 13
TCG
TCG
Donnerstag, 15. August 13
TCG micro-ops
38 21 00 01 !addi r1,r1,1
Donnerstag, 15. August 13
TCG micro-ops
38 21 00 01 !addi r1,r1,1
Donnerstag, 15. August 13
TCG micro-ops
tcg_gen_addi_tl(cpu_gpr[rD(ctx->opcode)], cpu_gpr[rA(ctx->opcode)], simm);
38 21 00 01 !addi r1,r1,1
Donnerstag, 15. August 13
TCG micro-ops
tcg_gen_addi_tl(cpu_gpr[rD(ctx->opcode)], cpu_gpr[rA(ctx->opcode)], simm);
38 21 00 01 !addi r1,r1,1
Donnerstag, 15. August 13
TCG micro-ops
tcg_gen_addi_tl(cpu_gpr[rD(ctx->opcode)], cpu_gpr[rA(ctx->opcode)], simm);
38 21 00 01 !addi r1,r1,1
Donnerstag, 15. August 13
TCG micro-ops
tcg_gen_addi_tl(cpu_gpr[rD(ctx->opcode)], cpu_gpr[rA(ctx->opcode)], simm);
38 21 00 01 !addi r1,r1,1
Donnerstag, 15. August 13
TCG micro-ops
tcg_gen_addi_tl(cpu_gpr[rD(ctx->opcode)], cpu_gpr[rA(ctx->opcode)], simm);
38 21 00 01 !addi r1,r1,1
Donnerstag, 15. August 13
TCG micro-ops
tcg_gen_addi_tl(cpu_gpr[rD(ctx->opcode)], cpu_gpr[rA(ctx->opcode)], simm);
38 21 00 01 !addi r1,r1,1
83 c3 01 ! add $0x1,%ebx
Donnerstag, 15. August 13
TCG micro-ops
7c 22 18 96 !mulhw r1,r2,r3
Donnerstag, 15. August 13
TCG micro-ops
7c 22 18 96 !mulhw r1,r2,r3
Donnerstag, 15. August 13
TCG micro-ops
t0 = tcg_temp_new_i64();
t1 = tcg_temp_new_i64();
tcg_gen_ext32s_tl(t0, cpu_gpr[rA(ctx->opcode)]);
tcg_gen_ext32s_tl(t1, cpu_gpr[rB(ctx->opcode)]);
tcg_gen_mul_i64(t0, t0, t1);
tcg_gen_shri_i64(cpu_gpr[rD(ctx->opcode)], t0, 32);
tcg_temp_free_i64(t0);
tcg_temp_free_i64(t1);
7c 22 18 96 !mulhw r1,r2,r3
Donnerstag, 15. August 13
TCG micro-ops
t0 = tcg_temp_new_i64();
t1 = tcg_temp_new_i64();
tcg_gen_ext32s_tl(t0, cpu_gpr[rA(ctx->opcode)]);
tcg_gen_ext32s_tl(t1, cpu_gpr[rB(ctx->opcode)]);
tcg_gen_mul_i64(t0, t0, t1);
tcg_gen_shri_i64(cpu_gpr[rD(ctx->opcode)], t0, 32);
tcg_temp_free_i64(t0);
tcg_temp_free_i64(t1);
7c 22 18 96 !mulhw r1,r2,r3
Donnerstag, 15. August 13
TCG micro-ops
t0 = tcg_temp_new_i64();
t1 = tcg_temp_new_i64();
tcg_gen_ext32s_tl(t0, cpu_gpr[rA(ctx->opcode)]);
tcg_gen_ext32s_tl(t1, cpu_gpr[rB(ctx->opcode)]);
tcg_gen_mul_i64(t0, t0, t1);
tcg_gen_shri_i64(cpu_gpr[rD(ctx->opcode)], t0, 32);
tcg_temp_free_i64(t0);
tcg_temp_free_i64(t1);
7c 22 18 96 !mulhw r1,r2,r3
Donnerstag, 15. August 13
TCG micro-ops
t0 = tcg_temp_new_i64();
t1 = tcg_temp_new_i64();
tcg_gen_ext32s_tl(t0, cpu_gpr[rA(ctx->opcode)]);
tcg_gen_ext32s_tl(t1, cpu_gpr[rB(ctx->opcode)]);
tcg_gen_mul_i64(t0, t0, t1);
tcg_gen_shri_i64(cpu_gpr[rD(ctx->opcode)], t0, 32);
tcg_temp_free_i64(t0);
tcg_temp_free_i64(t1);
7c 22 18 96 !mulhw r1,r2,r3
Donnerstag, 15. August 13
TCG micro-ops
t0 = tcg_temp_new_i64();
t1 = tcg_temp_new_i64();
tcg_gen_ext32s_tl(t0, cpu_gpr[rA(ctx->opcode)]);
tcg_gen_ext32s_tl(t1, cpu_gpr[rB(ctx->opcode)]);
tcg_gen_mul_i64(t0, t0, t1);
tcg_gen_shri_i64(cpu_gpr[rD(ctx->opcode)], t0, 32);
tcg_temp_free_i64(t0);
tcg_temp_free_i64(t1);
7c 22 18 96 !mulhw r1,r2,r3
Donnerstag, 15. August 13
TCG helper
7c 41 00 34 !cntlzw r1,r2
Donnerstag, 15. August 13
TCG helper
7c 41 00 34 !cntlzw r1,r2
gen_helper_cntlzw(cpu_gpr[rA(ctx->opcode)], cpu_gpr[rS(ctx->opcode)]);
Donnerstag, 15. August 13
TCG helper
7c 41 00 34 !cntlzw r1,r2
gen_helper_cntlzw(cpu_gpr[rA(ctx->opcode)], cpu_gpr[rS(ctx->opcode)]);
Donnerstag, 15. August 13
TCG helper
7c 41 00 34 !cntlzw r1,r2
gen_helper_cntlzw(cpu_gpr[rA(ctx->opcode)], cpu_gpr[rS(ctx->opcode)]);
Donnerstag, 15. August 13
TCG helper
7c 41 00 34 !cntlzw r1,r2
gen_helper_cntlzw(cpu_gpr[rA(ctx->opcode)], cpu_gpr[rS(ctx->opcode)]);
Donnerstag, 15. August 13
TCG helper
7c 41 00 34 !cntlzw r1,r2
gen_helper_cntlzw(cpu_gpr[rA(ctx->opcode)], cpu_gpr[rS(ctx->opcode)]);
Donnerstag, 15. August 13
TCG helper
7c 41 00 34 !cntlzw r1,r2
gen_helper_cntlzw(cpu_gpr[rA(ctx->opcode)], cpu_gpr[rS(ctx->opcode)]);
e8 e3 df 00 00 callq helper_cntlzw
Donnerstag, 15. August 13
TCG helper
7c 41 00 34 !cntlzw r1,r2
gen_helper_cntlzw(cpu_gpr[rA(ctx->opcode)], cpu_gpr[rS(ctx->opcode)]);
e8 e3 df 00 00 callq helper_cntlzw
target_ulong helper_cntlzw (target_ulong t)
{
return __builtin_clz(t);
}
Donnerstag, 15. August 13
Executing Code
Donnerstag, 15. August 13
Translation Blocks
Donnerstag, 15. August 13
Translation Blocks
Donnerstag, 15. August 13
Translation Blocks
Donnerstag, 15. August 13
Translation Blocks
code
Donnerstag, 15. August 13
Translation Blocks
0:!38 20 00 01 !li r1,1
4:!7c 20 0b 78 !mr r0,r1
8:!38 21 00 01 !addi r1,r1,1
Donnerstag, 15. August 13
Translation Blocks
0:!38 20 00 01 !li r1,1
4:!7c 20 0b 78 !mr r0,r1
8:!38 21 00 01 !addi r1,r1,1
c:!2c 01 00 02 !cmpwi r1,2
10:!41 82 ff f0 !beq+ 0x0
Donnerstag, 15. August 13
Translation Blocks
0:!38 20 00 01 !li r1,1
4:!7c 20 0b 78 !mr r0,r1
8:!38 21 00 01 !addi r1,r1,1
c:!2c 01 00 02 !cmpwi r1,2
10:!41 82 ff f0 !beq+ 0x0
Donnerstag, 15. August 13
Translation Blocks
0:!38 20 00 01 !li r1,1
4:!7c 20 0b 78 !mr r0,r1
8:!38 21 00 01 !addi r1,r1,1
c:!2c 01 00 02 !cmpwi r1,2
10:!41 82 ff f0 !beq+ 0x0
Donnerstag, 15. August 13
Translation Blocks
0:!38 20 00 01 !li r1,1
4:!7c 20 0b 78 !mr r0,r1
8:!38 21 00 01 !addi r1,r1,1
c:!2c 01 00 02 !cmpwi r1,2
10:!41 82 ff f0 !beq+ 0x0
Donnerstag, 15. August 13
Translation Blocks
Donnerstag, 15. August 13
Translation Blocks
Donnerstag, 15. August 13
Translation Blocks
Donnerstag, 15. August 13
Translation Blocks
Donnerstag, 15. August 13
Translation Blocks
Donnerstag, 15. August 13
Translation Blocks
code
Donnerstag, 15. August 13
TB Chaining
Donnerstag, 15. August 13
TB Chaining
Donnerstag, 15. August 13
TB Chaining
Donnerstag, 15. August 13
TB Chaining
Donnerstag, 15. August 13
TB Chaining
Donnerstag, 15. August 13
TB Chaining
Donnerstag, 15. August 13
TB Chaining
Donnerstag, 15. August 13
TB Chaining
Donnerstag, 15. August 13
TB optimization
38 20 00 01 !li r1,1
38 21 00 02 !addi r1,r1,2
38 20 00 09 !li r1,9
Donnerstag, 15. August 13
TB optimization
38 20 00 01 !li r1,1
38 21 00 02 !addi r1,r1,2
38 20 00 09 !li r1,9
Donnerstag, 15. August 13
TB optimization
38 20 00 01 !li r1,1
38 21 00 02 !addi r1,r1,2
38 20 00 09 !li r1,9
Donnerstag, 15. August 13
TB optimization
38 20 00 01 !li r1,1
38 21 00 02 !addi r1,r1,2
38 20 00 09 !li r1,9
Donnerstag, 15. August 13
TB optimization
38 20 00 01 !li r1,1
38 21 00 02 !addi r1,r1,2
38 20 00 09 !li r1,9
Donnerstag, 15. August 13
TB optimization
38 20 00 01 !li r1,1
C HELPER: r1=output, no input
38 20 00 09 !li r1,9
Donnerstag, 15. August 13
TB optimization
38 20 00 01 !li r1,1
C HELPER: r1=output, no input
38 20 00 09 !li r1,9
Donnerstag, 15. August 13
TB optimization
38 20 00 01 !li r1,1
C HELPER: r1=output, no input
38 20 00 09 !li r1,9
PURE
Donnerstag, 15. August 13
TB optimization
38 20 00 01 !li r1,1
C HELPER: r1=output, no input
38 20 00 09 !li r1,9
PURE
Donnerstag, 15. August 13
TB optimization
38 20 00 01 !li r1,1
C HELPER: r1=output, no input
38 20 00 09 !li r1,9
Donnerstag, 15. August 13
TB optimization
38 20 00 01 !li r1,1
C HELPER: r1=output, no input
38 20 00 09 !li r1,9
CONST
Donnerstag, 15. August 13
TB optimization
38 20 00 01 !li r1,1
C HELPER: r1=output, no input
38 20 00 09 !li r1,9
CONST
Donnerstag, 15. August 13
TB optimization
38 20 00 01 !li r1,1
C HELPER: r1=output, no input
38 20 00 09 !li r1,9
CONST
Donnerstag, 15. August 13
Donnerstag, 15. August 13
✔
Donnerstag, 15. August 13
Linux Program
Linux-user emulation
Donnerstag, 15. August 13
Linux Program
Linux-user emulation
Donnerstag, 15. August 13
Linux Program
Linux-user emulation
Donnerstag, 15. August 13
Linux Program
Linux-user emulation
Donnerstag, 15. August 13
Full system
Donnerstag, 15. August 13
Full system
Donnerstag, 15. August 13
Full system
Donnerstag, 15. August 13
Full system
Donnerstag, 15. August 13
Full system
Donnerstag, 15. August 13
Full system
Donnerstag, 15. August 13
Full system
Donnerstag, 15. August 13
Full system
Donnerstag, 15. August 13
Full system
Donnerstag, 15. August 13
Full system
Donnerstag, 15. August 13
Full system
Donnerstag, 15. August 13
Future Development
• Computer Systems Lab, Institute of
Information Science @ Taiwan
• Uli’s optimizations
Donnerstag, 15. August 13
Conclusion
• QEMU is very versatile
• A lot of areas for improvement
• Join in and hack away!
Donnerstag, 15. August 13

More Related Content

Viewers also liked

Vox pops production log
Vox pops   production logVox pops   production log
Vox pops production log
LukeBrazierMedia
 
Gipstructuur
GipstructuurGipstructuur
Gipstructuur
Julie Van der Straete
 
La transformació digital i la Internet of Things
La transformació digital i la Internet of ThingsLa transformació digital i la Internet of Things
La transformació digital i la Internet of Things
CSUC - Consorci de Serveis Universitaris de Catalunya
 
Zkouska
ZkouskaZkouska
Zkouska
kaca_mig
 
онисько л звичай це скарб
онисько л звичай   це скарбонисько л звичай   це скарб
онисько л звичай це скарб
MARO51
 
7 week plan
7 week plan7 week plan
7 week plan
LucyAnne97
 
ELIXIR TeSS And Bioschemas: An aggregated portal and an aggregation tool
ELIXIR TeSS And Bioschemas: An aggregated portal and an aggregation tool ELIXIR TeSS And Bioschemas: An aggregated portal and an aggregation tool
ELIXIR TeSS And Bioschemas: An aggregated portal and an aggregation tool
Niall Beard
 
Tec Edmonton e SUPERA Ribeirão
Tec Edmonton e SUPERA RibeirãoTec Edmonton e SUPERA Ribeirão
Tec Edmonton e SUPERA Ribeirão
Marcio Francesquine
 
Результаты 2 й четверти, 2015 год
Результаты 2 й четверти, 2015 годРезультаты 2 й четверти, 2015 год
Результаты 2 й четверти, 2015 год
Юлия Медякова
 
Rocio's vacations
Rocio's vacationsRocio's vacations
Rocio's vacations
RocioCruz34
 
Prix Litteraire inde CM - 6e
Prix Litteraire inde CM - 6ePrix Litteraire inde CM - 6e
Prix Litteraire inde CM - 6e
efibschool
 
Travel and Tourism - UK Tourists
Travel and Tourism - UK TouristsTravel and Tourism - UK Tourists
Travel and Tourism - UK Tourists
Ojas Mehta
 
Binary Option
Binary OptionBinary Option
Binary Option
Georgia Hampher
 

Viewers also liked (13)

Vox pops production log
Vox pops   production logVox pops   production log
Vox pops production log
 
Gipstructuur
GipstructuurGipstructuur
Gipstructuur
 
La transformació digital i la Internet of Things
La transformació digital i la Internet of ThingsLa transformació digital i la Internet of Things
La transformació digital i la Internet of Things
 
Zkouska
ZkouskaZkouska
Zkouska
 
онисько л звичай це скарб
онисько л звичай   це скарбонисько л звичай   це скарб
онисько л звичай це скарб
 
7 week plan
7 week plan7 week plan
7 week plan
 
ELIXIR TeSS And Bioschemas: An aggregated portal and an aggregation tool
ELIXIR TeSS And Bioschemas: An aggregated portal and an aggregation tool ELIXIR TeSS And Bioschemas: An aggregated portal and an aggregation tool
ELIXIR TeSS And Bioschemas: An aggregated portal and an aggregation tool
 
Tec Edmonton e SUPERA Ribeirão
Tec Edmonton e SUPERA RibeirãoTec Edmonton e SUPERA Ribeirão
Tec Edmonton e SUPERA Ribeirão
 
Результаты 2 й четверти, 2015 год
Результаты 2 й четверти, 2015 годРезультаты 2 й четверти, 2015 год
Результаты 2 й четверти, 2015 год
 
Rocio's vacations
Rocio's vacationsRocio's vacations
Rocio's vacations
 
Prix Litteraire inde CM - 6e
Prix Litteraire inde CM - 6ePrix Litteraire inde CM - 6e
Prix Litteraire inde CM - 6e
 
Travel and Tourism - UK Tourists
Travel and Tourism - UK TouristsTravel and Tourism - UK Tourists
Travel and Tourism - UK Tourists
 
Binary Option
Binary OptionBinary Option
Binary Option
 

Similar to Tcg

OptimizingARM
OptimizingARMOptimizingARM
OptimizingARM
Jan-Lieuwe Koopmans
 
OSb: OSv on BitVisor
OSb: OSv on BitVisorOSb: OSv on BitVisor
OSb: OSv on BitVisor
Yushi Omote
 
No more dumb hex!
No more dumb hex!No more dumb hex!
No more dumb hex!
Ange Albertini
 
# peripheral registers .equ PWR_BASE0x40007000 .equ PWR_CR0x00 .docx
# peripheral registers  .equ PWR_BASE0x40007000    .equ PWR_CR0x00  .docx# peripheral registers  .equ PWR_BASE0x40007000    .equ PWR_CR0x00  .docx
# peripheral registers .equ PWR_BASE0x40007000 .equ PWR_CR0x00 .docx
mayank272369
 
Microcontroller 8051 1
Microcontroller 8051  1Microcontroller 8051  1
Microcontroller 8051 1
khan yaseen
 
Stepper speed control
Stepper speed controlStepper speed control
Stepper speed control
Saumya Ranjan Behura
 
Microcontroller (8051) general and simple alp n cprograms
Microcontroller (8051) general and simple alp n cprogramsMicrocontroller (8051) general and simple alp n cprograms
Microcontroller (8051) general and simple alp n cprograms
Vedavyas PBurli
 
Scottish Ruby Conference 2010 Arduino, Ruby RAD
Scottish Ruby Conference 2010 Arduino, Ruby RADScottish Ruby Conference 2010 Arduino, Ruby RAD
Scottish Ruby Conference 2010 Arduino, Ruby RAD
lostcaggy
 
Dynamic user trace
Dynamic user traceDynamic user trace
Dynamic user trace
Vipin Varghese
 
Exploring the x64
Exploring the x64Exploring the x64
Exploring the x64
FFRI, Inc.
 
The Power of CSS
The Power of CSSThe Power of CSS
The Power of CSS
Aniket Pant
 
Kernel Recipes 2013 - Deciphering Oopsies
Kernel Recipes 2013 - Deciphering OopsiesKernel Recipes 2013 - Deciphering Oopsies
Kernel Recipes 2013 - Deciphering Oopsies
Anne Nicolas
 
8085 microprocessor 8155, 8255
8085 microprocessor  8155, 8255 8085 microprocessor  8155, 8255
8085 microprocessor 8155, 8255
Nitin Ahire
 
Raspberry Pi - best friend for all your GPIO needs
Raspberry Pi - best friend for all your GPIO needsRaspberry Pi - best friend for all your GPIO needs
Raspberry Pi - best friend for all your GPIO needs
Dobrica Pavlinušić
 
8051 microcontroller
8051 microcontroller 8051 microcontroller
8051 microcontroller
Gaurav Verma
 

Similar to Tcg (15)

OptimizingARM
OptimizingARMOptimizingARM
OptimizingARM
 
OSb: OSv on BitVisor
OSb: OSv on BitVisorOSb: OSv on BitVisor
OSb: OSv on BitVisor
 
No more dumb hex!
No more dumb hex!No more dumb hex!
No more dumb hex!
 
# peripheral registers .equ PWR_BASE0x40007000 .equ PWR_CR0x00 .docx
# peripheral registers  .equ PWR_BASE0x40007000    .equ PWR_CR0x00  .docx# peripheral registers  .equ PWR_BASE0x40007000    .equ PWR_CR0x00  .docx
# peripheral registers .equ PWR_BASE0x40007000 .equ PWR_CR0x00 .docx
 
Microcontroller 8051 1
Microcontroller 8051  1Microcontroller 8051  1
Microcontroller 8051 1
 
Stepper speed control
Stepper speed controlStepper speed control
Stepper speed control
 
Microcontroller (8051) general and simple alp n cprograms
Microcontroller (8051) general and simple alp n cprogramsMicrocontroller (8051) general and simple alp n cprograms
Microcontroller (8051) general and simple alp n cprograms
 
Scottish Ruby Conference 2010 Arduino, Ruby RAD
Scottish Ruby Conference 2010 Arduino, Ruby RADScottish Ruby Conference 2010 Arduino, Ruby RAD
Scottish Ruby Conference 2010 Arduino, Ruby RAD
 
Dynamic user trace
Dynamic user traceDynamic user trace
Dynamic user trace
 
Exploring the x64
Exploring the x64Exploring the x64
Exploring the x64
 
The Power of CSS
The Power of CSSThe Power of CSS
The Power of CSS
 
Kernel Recipes 2013 - Deciphering Oopsies
Kernel Recipes 2013 - Deciphering OopsiesKernel Recipes 2013 - Deciphering Oopsies
Kernel Recipes 2013 - Deciphering Oopsies
 
8085 microprocessor 8155, 8255
8085 microprocessor  8155, 8255 8085 microprocessor  8155, 8255
8085 microprocessor 8155, 8255
 
Raspberry Pi - best friend for all your GPIO needs
Raspberry Pi - best friend for all your GPIO needsRaspberry Pi - best friend for all your GPIO needs
Raspberry Pi - best friend for all your GPIO needs
 
8051 microcontroller
8051 microcontroller 8051 microcontroller
8051 microcontroller
 

Recently uploaded

fiscal year variant fiscal year variant.
fiscal year variant fiscal year variant.fiscal year variant fiscal year variant.
fiscal year variant fiscal year variant.
AnkitaPandya11
 
Webinar On-Demand: Using Flutter for Embedded
Webinar On-Demand: Using Flutter for EmbeddedWebinar On-Demand: Using Flutter for Embedded
Webinar On-Demand: Using Flutter for Embedded
ICS
 
zOS Mainframe JES2-JES3 JCL-JECL Differences
zOS Mainframe JES2-JES3 JCL-JECL DifferenceszOS Mainframe JES2-JES3 JCL-JECL Differences
zOS Mainframe JES2-JES3 JCL-JECL Differences
YousufSait3
 
SQL Accounting Software Brochure Malaysia
SQL Accounting Software Brochure MalaysiaSQL Accounting Software Brochure Malaysia
SQL Accounting Software Brochure Malaysia
GohKiangHock
 
Liberarsi dai framework con i Web Component.pptx
Liberarsi dai framework con i Web Component.pptxLiberarsi dai framework con i Web Component.pptx
Liberarsi dai framework con i Web Component.pptx
Massimo Artizzu
 
Energy consumption of Database Management - Florina Jonuzi
Energy consumption of Database Management - Florina JonuziEnergy consumption of Database Management - Florina Jonuzi
Energy consumption of Database Management - Florina Jonuzi
Green Software Development
 
Lecture 2 - software testing SE 412.pptx
Lecture 2 - software testing SE 412.pptxLecture 2 - software testing SE 412.pptx
Lecture 2 - software testing SE 412.pptx
TaghreedAltamimi
 
UI5con 2024 - Bring Your Own Design System
UI5con 2024 - Bring Your Own Design SystemUI5con 2024 - Bring Your Own Design System
UI5con 2024 - Bring Your Own Design System
Peter Muessig
 
UI5con 2024 - Boost Your Development Experience with UI5 Tooling Extensions
UI5con 2024 - Boost Your Development Experience with UI5 Tooling ExtensionsUI5con 2024 - Boost Your Development Experience with UI5 Tooling Extensions
UI5con 2024 - Boost Your Development Experience with UI5 Tooling Extensions
Peter Muessig
 
Modelling Up - DDDEurope 2024 - Amsterdam
Modelling Up - DDDEurope 2024 - AmsterdamModelling Up - DDDEurope 2024 - Amsterdam
Modelling Up - DDDEurope 2024 - Amsterdam
Alberto Brandolini
 
Top Benefits of Using Salesforce Healthcare CRM for Patient Management.pdf
Top Benefits of Using Salesforce Healthcare CRM for Patient Management.pdfTop Benefits of Using Salesforce Healthcare CRM for Patient Management.pdf
Top Benefits of Using Salesforce Healthcare CRM for Patient Management.pdf
VALiNTRY360
 
The Key to Digital Success_ A Comprehensive Guide to Continuous Testing Integ...
The Key to Digital Success_ A Comprehensive Guide to Continuous Testing Integ...The Key to Digital Success_ A Comprehensive Guide to Continuous Testing Integ...
The Key to Digital Success_ A Comprehensive Guide to Continuous Testing Integ...
kalichargn70th171
 
WWDC 2024 Keynote Review: For CocoaCoders Austin
WWDC 2024 Keynote Review: For CocoaCoders AustinWWDC 2024 Keynote Review: For CocoaCoders Austin
WWDC 2024 Keynote Review: For CocoaCoders Austin
Patrick Weigel
 
Preparing Non - Technical Founders for Engaging a Tech Agency
Preparing Non - Technical Founders for Engaging  a  Tech AgencyPreparing Non - Technical Founders for Engaging  a  Tech Agency
Preparing Non - Technical Founders for Engaging a Tech Agency
ISH Technologies
 
E-commerce Development Services- Hornet Dynamics
E-commerce Development Services- Hornet DynamicsE-commerce Development Services- Hornet Dynamics
E-commerce Development Services- Hornet Dynamics
Hornet Dynamics
 
Using Query Store in Azure PostgreSQL to Understand Query Performance
Using Query Store in Azure PostgreSQL to Understand Query PerformanceUsing Query Store in Azure PostgreSQL to Understand Query Performance
Using Query Store in Azure PostgreSQL to Understand Query Performance
Grant Fritchey
 
Hand Rolled Applicative User Validation Code Kata
Hand Rolled Applicative User ValidationCode KataHand Rolled Applicative User ValidationCode Kata
Hand Rolled Applicative User Validation Code Kata
Philip Schwarz
 
UI5con 2024 - Keynote: Latest News about UI5 and it’s Ecosystem
UI5con 2024 - Keynote: Latest News about UI5 and it’s EcosystemUI5con 2024 - Keynote: Latest News about UI5 and it’s Ecosystem
UI5con 2024 - Keynote: Latest News about UI5 and it’s Ecosystem
Peter Muessig
 
Project Management: The Role of Project Dashboards.pdf
Project Management: The Role of Project Dashboards.pdfProject Management: The Role of Project Dashboards.pdf
Project Management: The Role of Project Dashboards.pdf
Karya Keeper
 
在线购买加拿大英属哥伦比亚大学毕业证本科学位证书原版一模一样
在线购买加拿大英属哥伦比亚大学毕业证本科学位证书原版一模一样在线购买加拿大英属哥伦比亚大学毕业证本科学位证书原版一模一样
在线购买加拿大英属哥伦比亚大学毕业证本科学位证书原版一模一样
mz5nrf0n
 

Recently uploaded (20)

fiscal year variant fiscal year variant.
fiscal year variant fiscal year variant.fiscal year variant fiscal year variant.
fiscal year variant fiscal year variant.
 
Webinar On-Demand: Using Flutter for Embedded
Webinar On-Demand: Using Flutter for EmbeddedWebinar On-Demand: Using Flutter for Embedded
Webinar On-Demand: Using Flutter for Embedded
 
zOS Mainframe JES2-JES3 JCL-JECL Differences
zOS Mainframe JES2-JES3 JCL-JECL DifferenceszOS Mainframe JES2-JES3 JCL-JECL Differences
zOS Mainframe JES2-JES3 JCL-JECL Differences
 
SQL Accounting Software Brochure Malaysia
SQL Accounting Software Brochure MalaysiaSQL Accounting Software Brochure Malaysia
SQL Accounting Software Brochure Malaysia
 
Liberarsi dai framework con i Web Component.pptx
Liberarsi dai framework con i Web Component.pptxLiberarsi dai framework con i Web Component.pptx
Liberarsi dai framework con i Web Component.pptx
 
Energy consumption of Database Management - Florina Jonuzi
Energy consumption of Database Management - Florina JonuziEnergy consumption of Database Management - Florina Jonuzi
Energy consumption of Database Management - Florina Jonuzi
 
Lecture 2 - software testing SE 412.pptx
Lecture 2 - software testing SE 412.pptxLecture 2 - software testing SE 412.pptx
Lecture 2 - software testing SE 412.pptx
 
UI5con 2024 - Bring Your Own Design System
UI5con 2024 - Bring Your Own Design SystemUI5con 2024 - Bring Your Own Design System
UI5con 2024 - Bring Your Own Design System
 
UI5con 2024 - Boost Your Development Experience with UI5 Tooling Extensions
UI5con 2024 - Boost Your Development Experience with UI5 Tooling ExtensionsUI5con 2024 - Boost Your Development Experience with UI5 Tooling Extensions
UI5con 2024 - Boost Your Development Experience with UI5 Tooling Extensions
 
Modelling Up - DDDEurope 2024 - Amsterdam
Modelling Up - DDDEurope 2024 - AmsterdamModelling Up - DDDEurope 2024 - Amsterdam
Modelling Up - DDDEurope 2024 - Amsterdam
 
Top Benefits of Using Salesforce Healthcare CRM for Patient Management.pdf
Top Benefits of Using Salesforce Healthcare CRM for Patient Management.pdfTop Benefits of Using Salesforce Healthcare CRM for Patient Management.pdf
Top Benefits of Using Salesforce Healthcare CRM for Patient Management.pdf
 
The Key to Digital Success_ A Comprehensive Guide to Continuous Testing Integ...
The Key to Digital Success_ A Comprehensive Guide to Continuous Testing Integ...The Key to Digital Success_ A Comprehensive Guide to Continuous Testing Integ...
The Key to Digital Success_ A Comprehensive Guide to Continuous Testing Integ...
 
WWDC 2024 Keynote Review: For CocoaCoders Austin
WWDC 2024 Keynote Review: For CocoaCoders AustinWWDC 2024 Keynote Review: For CocoaCoders Austin
WWDC 2024 Keynote Review: For CocoaCoders Austin
 
Preparing Non - Technical Founders for Engaging a Tech Agency
Preparing Non - Technical Founders for Engaging  a  Tech AgencyPreparing Non - Technical Founders for Engaging  a  Tech Agency
Preparing Non - Technical Founders for Engaging a Tech Agency
 
E-commerce Development Services- Hornet Dynamics
E-commerce Development Services- Hornet DynamicsE-commerce Development Services- Hornet Dynamics
E-commerce Development Services- Hornet Dynamics
 
Using Query Store in Azure PostgreSQL to Understand Query Performance
Using Query Store in Azure PostgreSQL to Understand Query PerformanceUsing Query Store in Azure PostgreSQL to Understand Query Performance
Using Query Store in Azure PostgreSQL to Understand Query Performance
 
Hand Rolled Applicative User Validation Code Kata
Hand Rolled Applicative User ValidationCode KataHand Rolled Applicative User ValidationCode Kata
Hand Rolled Applicative User Validation Code Kata
 
UI5con 2024 - Keynote: Latest News about UI5 and it’s Ecosystem
UI5con 2024 - Keynote: Latest News about UI5 and it’s EcosystemUI5con 2024 - Keynote: Latest News about UI5 and it’s Ecosystem
UI5con 2024 - Keynote: Latest News about UI5 and it’s Ecosystem
 
Project Management: The Role of Project Dashboards.pdf
Project Management: The Role of Project Dashboards.pdfProject Management: The Role of Project Dashboards.pdf
Project Management: The Role of Project Dashboards.pdf
 
在线购买加拿大英属哥伦比亚大学毕业证本科学位证书原版一模一样
在线购买加拿大英属哥伦比亚大学毕业证本科学位证书原版一模一样在线购买加拿大英属哥伦比亚大学毕业证本科学位证书原版一模一样
在线购买加拿大英属哥伦比亚大学毕业证本科学位证书原版一模一样
 

Tcg