# [Write Neon intrinsics using GitHub Copilot to improve Adler32 performance](https://learn.arm.com/learning-paths/cross-platform/adler32/)

## In this learning path

- [Introduction](https://learn.arm.com/learning-paths/cross-platform/adler32/)
- [About Neon and Adler32](https://learn.arm.com/learning-paths/cross-platform/adler32/about-2/)
- [Create a C Version of Adler32](https://learn.arm.com/learning-paths/cross-platform/adler32/simple-c-3/)
- [Create a test program](https://learn.arm.com/learning-paths/cross-platform/adler32/test-prog-4/)
- [Create a Makefile](https://learn.arm.com/learning-paths/cross-platform/adler32/makefile-5/)
- [Build and run the test program](https://learn.arm.com/learning-paths/cross-platform/adler32/build-6/)
- [Create a Neon version of Adler32](https://learn.arm.com/learning-paths/cross-platform/adler32/neon-7/)
- [Compare the Neon version to the standard C version of Adler32](https://learn.arm.com/learning-paths/cross-platform/adler32/neon-run-8/)
- [Debug the Neon version to match the standard C version](https://learn.arm.com/learning-paths/cross-platform/adler32/neon-debug-9/)
- [Summarize the project with a README.md file](https://learn.arm.com/learning-paths/cross-platform/adler32/summary-10/)
- [Other ideas for GitHub Copilot](https://learn.arm.com/learning-paths/cross-platform/adler32/more-11/)
- [Next Steps](https://learn.arm.com/learning-paths/cross-platform/adler32/_next-steps/)

## About this Learning Path

| Skill level:         | Introductory     |
|----------------------|-------------------|
| Reading time:        | 45 min            |
| Last updated:        | 02 Jul 2026       |

| Author:              | Jason Andrews, Arm [GitHub](https://github.com/jasonrandrews), [LinkedIn](https://linkedin.com/in/jason-andrews-7b05a8) |
|----------------------|------------------|
| Arm IP:              | [Neoverse](https://support.arm.com/?tab=compute-ip&Product%20Type=Infrastructure%20Processors), [Cortex-A](https://support.arm.com/?tab=compute-ip&Product%20Type=Application%20Processors) |
| Tags:                | [Performance and Architecture](https://learn.arm.com/tag/performance-and-architecture), [Linux](https://learn.arm.com/tag/linux), [GCC](https://learn.arm.com/tag/gcc), [Runbook](https://learn.arm.com/tag/runbook) |

### Who is this for?
This is an introductory topic for C/C++ developers who are interested in using GitHub Copilot to improve performance using Neon intrinsics.

### What will you learn?
Upon completion of this Learning Path, you will be able to:
- Use GitHub Copilot to write Neon intrinsics that accelerate the Adler32 checksum algorithm.

### Prerequisites
Before starting, you will need the following:
- An Arm computer running Linux with the GNU compiler (gcc) installed.
- Visual Studio Code with the GitHub Copilot extension installed.

### Summary
You’ll use GitHub Copilot in Visual Studio Code to set up an Adler32 checksum project on an Arm Linux system, establish a C baseline, and measure results. First, you’ll generate the C implementation, create a test program that validates correctness and records timing for multiple input sizes, and ask Copilot to produce a GCC-based Makefile tuned for a Neoverse N1 target. Then, you’ll build and run the project, verify outputs, and collect timing data. With a working harness and repeatable measurements, you’re positioned to introduce Arm Neon intrinsics for the Adler32 hot path and compare behavior against the baseline C version.

### Frequently asked questions
<details>
<summary>What files should exist before building?</summary>
You should have the C implementation (`adler32-simple.c`), a test program (`adler32-test.c`), and a Makefile generated by GitHub Copilot. If a file is missing or named differently, regenerate it using the provided prompts.
</details>

<details>
<summary>Which GitHub Copilot mode should I use to generate the code and Makefile?</summary>
Use the Copilot Agent session in VS Code and paste the prompts from the steps. Results vary by model, so minor differences in code or target names are expected.
</details>

<details>
<summary>How do I run the tests and verify correctness?</summary>
Use the Copilot-generated Makefile to build and execute the test program. The run should confirm correct checksum results for all listed data sizes before you proceed.
</details>

<details>
<summary>What should I check if the GCC build fails on my Arm system?</summary>
Confirm that GCC is installed and that the Makefile’s architecture-specific flags are supported. If a flag is not recognized for your CPU, adjust or remove it and rebuild.
</details>

<details>
<summary>What output should I expect when measuring performance?</summary>
The test program measures timing around Adler32 calls on random inputs of 1 KB, 10 KB, 100 KB, 1 MB, and 10 MB. You should see per-size timings that you can reuse when evaluating a Neon-based implementation.
</details>
