To add to Ted's answer, depending on the capabilities of your platform, the XOR of bit sequences that implements addition in GF$(256)$ might be implementable as the XOR of bytes; often available as a machine instruction, even on simple processors.
On the other hand, implementing the multiplication of two elements of GF$(256)$ as multiplication of two polynomials and then taking the remainder modulo $x^8+x^4+x^3+x^2+1$ is very time-consuming. I recommend you read an excellent tutorial description by @Jyrki Lahtonen. If you have memory available, Galois field multiplication can be implemented via log tables. See here for a description of log tables, and do follow all the links there to get some ideas on how to speed up things.
Edit: added new material on multiplication
Suppose that we want to multiply binary polynomials $c(x) = \sum_{i=0}^7 c_ix^i$ and $d(x) = \sum_{i=0}^7 d_ix^i$, and find the remainder after dividing the result by $m(x) = x^8+x^4+x^3+x^2+1$, that is, we want to compute $c(x)d(x)\bmod m(x)$. Sometimes it is convenient to embed the division by $m(x)$ into the multiplication process, and this idea can be particularly useful in the encoder figure shown in the question in which one polynomial (the one being fed back in the top line of the figure) is to be multiplied by $k$ different (fixed) polynomials $g^{(i)}(x), 0 \leq i \leq k-1$. We have $\begin{align*} e(x) &= c(x)d(x) \bmod m(x)\\ &= \left(\sum_{i=0}^7 c_ix^i\right) d(x) \bmod m(x)\\ &= \left[c_0d(x) + c_1xd(x) + c_2x^2d(x) + \cdots + c_7x^7d(x)\right] \bmod m(x)\\ &= c_0d(x) + c_1[xd(x)\bmod m(x)] + c_2[x (xd(x)\bmod m(x))\bmod m(x) ]+\cdots\\ &\quad\quad\quad\quad\quad\quad\quad \cdots + c_7[x(x^6d(x)\bmod m(x)) \bmod m(x)]\\ &= \sum_{i=0}^7 c_if^{(i)}(x) \end{align*}$ where $f^{(0)}(x) = f(x)$ and $f^{(i)}(x) = xf^{(i-1)}(x) \bmod m(x) = x^id(x) \bmod m(x)$. Note that the $c_i$ are $0$ or $1$. So, $e(x)$ is initialized to the zero polynomial and then if $c_0 = 1$, $d(x)$ is added to $e(x)$. Then, if $d(x)$ is not needed any more (it is not in the QR code application being considered here), it is replaced by $xd(x) \bmod m(x) = \sum_{i=0}^7 d_ix^{i+1} \bmod m(x) = \sum_{i=0}^7 (d_{i-1}\oplus d_7m_i)x^{i}. $ If $d(x)$ is needed elsewhere, this operation is carried out on the copy that has been called $f(x)$. Next, if $c_1 = 1$, the new $d(x)$ is added to the sum being accumulated in $e(x)$ and the new $d(x)$ replaced by $xd(x) \bmod d(x)$, etc. In short, the following two-step process is executed for $k = 0, \ldots , 7$.
- If $c_k = 1$, $e(x):= e(x) + d(x)$
- $d(x) := \sum_{i=0}^7 (d_{i-1}\oplus d_7m_i)x^{i}$
to complete the GF$(256)$ multiplication in eight iterations of the two-step process.
There are two advantages of this approach for the QR code application First, if $d(x)$ is chosen to be the polynomial being fed back and $c(x)$ one of the $g^{(j)}(x)$, then the coefficients of $c(x)$ are fixed and known ahead of time, and so the first of the two steps above can be simplified. Second, since the same $d(x)$ is being used to multiply $k$ different $g^{(j)}(x)$'s, the update of $d(x)$ can be shared among the $k$ different multiplications if they are arranged to proceed in parallel instead of one by one. Also, as a minor improvement, since the product $e(x)$ is to be added to a $b(x)$, $e(x)$ can be initialized to have value $b(x)$ instead of the zero polynomial.